Spring Boot 2.0 整合 Mybatis

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 插入数据库使用,直接传入实体类会自动解析属性到对应的值

其它地方无需修改。

猜你喜欢

转载自blog.csdn.net/AaronSimon/article/details/84250764