springboot整合mybatis

一.添加相关依赖和配置插件

配置资源拷贝插件的原因:
maven 默认只把 src/main/resources 里面的非.java 文件进行编译到classes ,书写sql的xml文件与dao放置在src/main/java相同的包路径下,在使用的时候会因为这个原因找不到对应的xml文件,从而报错。
如果希望 src/main/java 下的文件也被编辑到 classes 中,需要在pom.xml中配置资源拷贝。
 <!--配置Generator插件-->
<!--通过配置文件将数据库中的表在指定的包下生成xml配置文件和实体类和dao类-->
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.4</version>
        <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        </dependencies>
        <!--指定配置文件的路径-->
        <configuration>
            <configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile>
            <verbose>true</verbose>
            <overwrite>true</overwrite>
        </configuration>
    </plugin>
</plugins>
<!--配置资源拷贝插件-->
<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
<!--当逆向工程生成的配置xml与dao类在同一包下 通过资源拷贝配置-->
            <include>**/*.xml</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
<!--配置资源拷贝插件会使默认配置失效,为了将application.peoperties和thymeleaf模板文件添加到编译文件中去-->
            <include>**/*.*</include>
            <include>**/*.yml</include>
            <include>**/*.properties</include>
        </includes>
    </resource>
</resources>
generatorConfig.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test"
                        userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
            connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
            userId="yycg"
            password="yycg">
        </jdbcConnection> -->

        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="com.mc_74120.springbootmybatis.pojo"
                            targetProject="./src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.mc_74120.springbootmybatis.mapper"
                         targetProject="./src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.mc_74120.springbootmybatis.mapper"
                             targetProject="./src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定数据库表 -->
        <table tableName="user"></table>
        <!-- <table schema="" tableName="sys_user"></table>
        <table schema="" tableName="sys_role"></table>
        <table schema="" tableName="sys_permission"></table>
        <table schema="" tableName="sys_user_role"></table>
        <table schema="" tableName="sys_role_permission"></table> -->

        <!-- 有些表的字段需要指定java类型
         <table schema="" tableName="">
            <columnOverride column="" javaType="" />
        </table> -->
    </context>
</generatorConfiguration>

 

配置好后 

 

即可生成逆向工程

 

 最后 在springboot的主启动类上加

@SpringBootApplication
@MapperScan("com.mc_74120.springbootmybatis.mapper")//指定扫描接口与配置文件的包名

若mybatis的映射文件不在mapper包下
则在application文件中 添加:mybatis.mapper.locations=classpath:/mapper/*.xml
此时 @MapperScan注解只能扫描到接口 无法扫描到映射文件

二.进行测试

1.因为已经生成了dao层的配置文件和接口 只需要写service层和controller层即可
2.controller层

package com.mc_74120.springbootmybatis.controller;

import com.mc_74120.springbootmybatis.pojo.User;
import com.mc_74120.springbootmybatis.service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserServiceImpl userService;
    @PostMapping("/addUser")
    public String addUser(User user){
        try {
userService.addUser(user);
        }
        catch (Exception e){
            e.printStackTrace();
            return  "error";
        }
        return  "redirect:/ok";
    }
    @GetMapping("findAllUser")
    public String findAllUser(Model model){
        try {
       List<User> users= userService.findAllUser();
       model.addAttribute("userList",users);
        }
        catch (Exception e){
            e.printStackTrace();
            return  "error";
        }
        return  "selectUser";
    }
    @GetMapping("/preUpdate")
    public String preUpdate(@RequestParam Integer id,Model model){
        try {
          User user= userService.preUpdate(id);
            model.addAttribute("user",user);
        }
        catch (Exception e){
            e.printStackTrace();
            return  "error";
        }
        return  "updateUser";
    }
    @PostMapping("/updateUser")
    public String updateUser(User user){
        try {
            userService.updateUser(user);
        }
        catch (Exception e){
            e.printStackTrace();
            return  "error";
        }
        return  "redirect:/ok";
    }
    @GetMapping("/deleteUser")
    public String deleteUser(Integer id){
        try {
            userService.deleteUser(id);
        }
        catch (Exception e){
            e.printStackTrace();
            return  "error";
        }
        return  "ok";
    }
    @ExceptionHandler(value = {java.lang.NullPointerException.class})
    public ModelAndView nullPointExceptionHandler(Exception e,ModelAndView ModelAndView){
            ModelAndView.addObject("err",e.toString());
            ModelAndView.setViewName("");
            return ModelAndView;
    }
}

3.service层

package com.mc_74120.springbootmybatis.service;
import com.mc_74120.springbootmybatis.mapper.UserMapper;
import com.mc_74120.springbootmybatis.pojo.User;
import com.mc_74120.springbootmybatis.pojo.UserExample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class UserServiceImpl implements  UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    @Transactional
        public void addUser(User user) {
            userMapper.insert(user);

    }

    @Override
    @Transactional
    public List<User> findAllUser() {
        UserExample userExample=new UserExample();
        return userMapper.selectByExample(userExample);
    }

    @Override
    public User preUpdate(Integer id) {
        return userMapper.selectByPrimaryKey(id);
    }

    @Override
    @Transactional
    public void updateUser(User user) {
        userMapper.updateByPrimaryKeySelective(user);
    }

    @Override
    @Transactional
    public void deleteUser(Integer id) {
        userMapper.deleteByPrimaryKey(id);
    }
}
package com.mc_74120.springbootmybatis.service;

import com.mc_74120.springbootmybatis.pojo.User;

import java.util.List;

public interface UserService {
    void  addUser(User user);
    List<User> findAllUser();
    User preUpdate(Integer id);
    void updateUser(User user);
    void deleteUser(Integer id);
}
posted @ 2020-04-21 00:41  第十八使徒  阅读(111)  评论(0)    收藏  举报