美文网首页Spring Boot 2.0
Spring Boot 2.0 整合 Mybatis

Spring Boot 2.0 整合 Mybatis

作者: AaronSimon | 来源:发表于2018-11-20 08:00 被阅读64次

    Spring Boot 2.0 整合 Mybatis分为两种模式。一种是XML配置,一种是注解。

    一、XML配置方式整合

    1.1 依赖文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>priv.simon</groupId>
      <artifactId>mybatis</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>mybatis</name>
      <description>Demo project for Spring Boot</description>
    
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
      </parent>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>1.3.2</version>
        </dependency>
        <!-- alibaba的druid数据库连接池 -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid-spring-boot-starter</artifactId>
          <version>1.1.10</version>
        </dependency>
        <!-- 分页插件 -->
        <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper-spring-boot-starter</artifactId>
          <version>1.2.10</version>
        </dependency>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <scope>runtime</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </project>
    

    在依赖中我们添加了分页插件的依赖。

    1.2 配置文件

    server:
      port: 8080
    spring:
      datasource:
        name: testdb
        type: com.alibaba.druid.pool.DruidDataSource
        #druid相关配置
        druid:
          #监控统计拦截的filters
          filters: stat
          driver-class-name: com.mysql.jdbc.Driver
          #基本属性
          url: jdbc:mysql://192.168.10.58:3306/testdb?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
          username: root
          password: 123456
          #配置初始化大小/最小/最大
          initial-size: 1
          min-idle: 1
          max-active: 20
          #获取连接等待超时时间
          max-wait: 60000
          #间隔多久进行一次检测,检测需要关闭的空闲连接
          time-between-eviction-runs-millis: 60000
          #一个连接在池中最小生存的时间
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20
    mybatis:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: priv.simon.mybatis.model
    #分页插件
    pagehelper:
      helperDialect: mysql
      reasonable: true
      supportMethodsArguments: true
      params: count=countSql
    

    1.3 创建表和实体

    在数据库中执行下面的SQL创建表:

    CREATE DATABASE testdb;
    CREATE TABLE user(
      userId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
      userName VARCHAR(255) NOT NULL ,
      password VARCHAR(255) NOT NULL ,
      phone VARCHAR(255) NOT NULL
    ) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
    

    对应在priv.simon.mybatis.model包下创建实体User

    public class User {
        private Integer userId;
    
        private String username;
    
        private String password;
    
        private String phone;
    
        public Integer getUserId() {
            return userId;
        }
    
        public void setUserId(Integer userId) {
            this.userId = userId;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username == null ? null : username.trim();
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password == null ? null : password.trim();
        }
    
        public String getPhone() {
            return phone;
        }
    
        public void setPhone(String phone) {
            this.phone = phone == null ? null : phone.trim();
        }
    }
    

    1.4 创建查询接口mapper

    priv.simon.mybatis.mapper包下创建UserMapper

    public interface UserMapper {
      /**
       * 插入数据
       * @param record  数据记录
       * @return  成功操作的记录数
       */
      int insert(User record);
    
      /**
       * 查询所有用户
       *
       * @return 所有用户数据
       */
      List <User> selectUsers();
    }
    

    1.5 创建service

    priv.simon.mybatis.service下创建IUserService接口

    public interface IUserService {
      /**
       * 增添用户
       *
       * @param user 用户信息
       */
      int addUser(User user);
      /**
       * 查询所有用户信息
       *
       * @param pageNum 页码
       * @param pageSize 显示记录数
       */
      PageInfo<User> findAllUser(int pageNum, int pageSize);
    }
    

    priv.simon.mybatis.service.impl下创建IUserService的实现类UserService

    @Service
    public class UserService implements IUserService {
    
      private final UserMapper userDao;
    
      @Autowired
      public UserService(UserMapper userDao) {
        this.userDao = userDao;
      }
    
      @Override
      public int addUser(User user) {
        return userDao.insert(user);
      }
    
      @Override
      public PageInfo <User> findAllUser(int pageNum, int pageSize) {
        //将参数传给这个方法就可以实现物理分页了,非常简单。
        PageHelper.startPage(pageNum, pageSize);
        List <User> userDomains = userDao.selectUsers();
        return new PageInfo(userDomains);
      }
    }
    

    1.6 创建Controller

    priv.simon.mybatis.controller下创建UserController

    @RestController
    public class UserController {
      @Autowired
      private UserService userService;
    
      @ResponseBody
      @PostMapping("/addUser")
      public int addUser(User user) {
        return userService.addUser(user);
      }
    
      @ResponseBody
      @GetMapping("/findAllUser")
      public Object findAllUser(
              @RequestParam(name = "pageNum", required = false, defaultValue = "1")
                      int pageNum,
              @RequestParam(name = "pageSize", required = false, defaultValue = "10")
                      int pageSize) {
        return userService.findAllUser(pageNum, pageSize);
      }
    }
    

    1.7 启动类修改

    在启动类上添加mapper扫描注解

    @SpringBootApplication
    @MapperScan("priv.simon.mybatis.mapper")
    public class MybatisApplication {
    
      public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
      }
    }
    

    二、注解方式整合

    1. 修改配置文件
      注释mybatis.mapper-locations: classpath:mapper/*.xml配置。
    2. 修改UserMapper.java
    public interface UserMapper {
      /**
       * 插入数据
       * @param record  数据记录
       * @return  成功操作的记录数
       */
      @Insert("INSERT INTO user(userId,username,password,phone}) VALUES(#{userId}, #{username}, #{password},#{phone})")
      int insert(User record);
    
      /**
       * 查询所有用户
       *
       * @return 所有用户数据
       */
      @Select("SELECT * FROM user")
      @Results({
              @Result(property = "userId",column = "userId"),
              @Result(property = "username",column = "username"),
              @Result(property = "password",column = "password"),
              @Result(property = "phone",column = "phone")
      })
      List <User> selectUsers();
    }
    
    • @Select 是查询类的注解,所有的查询均使用这个
    • @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类* 属性和数据库属性名保持一致,就不需要这个属性来修饰。
    • @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值

    其它地方无需修改。

    相关文章

      网友评论

        本文标题:Spring Boot 2.0 整合 Mybatis

        本文链接:https://www.haomeiwen.com/subject/ljqafqtx.html