Spring Boot 2.0 整合 Mybatis

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

一、XML配置方式整合

1.1 依赖文件


<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.0modelVersion>

  <groupId>priv.simongroupId>
  <artifactId>mybatisartifactId>
  <version>0.0.1-SNAPSHOTversion>
  <packaging>jarpackaging>

  <name>mybatisname>
  <description>Demo project for Spring Bootdescription>

  <parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.1.0.RELEASEversion>
    <relativePath/> 
  parent>

  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
    <java.version>1.8java.version>
  properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-jdbcartifactId>
    dependency>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-webartifactId>
    dependency>
    <dependency>
      <groupId>org.mybatis.spring.bootgroupId>
      <artifactId>mybatis-spring-boot-starterartifactId>
      <version>1.3.2version>
    dependency>
    
    <dependency>
      <groupId>com.alibabagroupId>
      <artifactId>druid-spring-boot-starterartifactId>
      <version>1.1.10version>
    dependency>
    
    <dependency>
      <groupId>com.github.pagehelpergroupId>
      <artifactId>pagehelper-spring-boot-starterartifactId>
      <version>1.2.10version>
    dependency>
    <dependency>
      <groupId>mysqlgroupId>
      <artifactId>mysql-connector-javaartifactId>
      <scope>runtimescope>
    dependency>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-testartifactId>
      <scope>testscope>
    dependency>
  dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-maven-pluginartifactId>
      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,Spring,Boot,2.0)