1. 程式人生 > >Spring Boot 2.0 整合 Mybatis

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 插入資料庫使用,直接傳入實體類會自動解析屬性到對應的值

其它地方無需修改。