1. 程式人生 > >SpringBoot 2.x 整合 MyBatis (簡單優雅)

SpringBoot 2.x 整合 MyBatis (簡單優雅)

建立專案

兩種方式建立SpringBoot工程。
方式一:IDEA中建立SpringBoot工程,依次選擇要新增的模組。
方式二:通過訪問 Spring Initializr 線上建立,再本地匯入。這裡我們選用第二種方式。

這裡寫圖片描述

自行新增自己需要的模組即可,說明
1、(必選)MySql和MyBatis模組就不用說了。
2、(必選)web:裡面會將Tomcat和SpringMVC依賴匯入。後期直接執行專案即可在瀏覽器中訪問。
3、(可選)devtools:選後讓我們開發更方便,如程式碼變更時只需重新編譯此檔案即可,無需重啟伺服器。
4、(可選)Aspect:面向切面程式設計需要的依賴,系統日誌等功能會用上。
5、(可選)Thymeleaf:Java模板引擎,注意SpringBoot1.5以上已經拋棄了Velocity,我們直接用thymeleaf。

之後點選Generate Project,下載到本地解壓,在IDEA中選擇此專案匯入。

其實這部分所做的操作本質上是新建一個SpringBoot工程,在pom.xml檔案裡新增各種依賴。這裡如果我們已經有SpringBoot工程了,我們直接在pom.xml檔案裡新增如下依賴即可:

<?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>com.bowen</groupId> <artifactId>BWQASystem</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging
>
<name>BWQASystem</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.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>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!--SpringBoot1.5以上已經拋棄了Velocity,我們直接用thymeleaf--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</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>

整合MyBatis

總體步驟:
1、SpringB工程中的application.properties總配置檔案中增加如下配置資訊
(資料庫連線資訊配置)

spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
# 指明mybatis的配置檔案所在位置
mybatis.config-location=classpath:mybatis-config.xml

2、在以上的application.properties配置檔案中指定的mybatis-config.xml的配置檔案裡面需要填入的配置資訊如下:
(關於mybatis的詳細策略配置資訊)
更多配置細節參考MyBatis對映配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 全域性地開啟或關閉配置檔案中的所有對映器已經配置的任何快取。 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 設定超時時間,它決定驅動等待資料庫響應的秒數。 -->
        <setting name="defaultStatementTimeout" value="3000"/>
        <!-- 是否開啟自動駝峰命名規則(camel case)對映,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似對映。 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 允許 JDBC 支援自動生成主鍵 -->
        <setting name="useGeneratedKeys" value="true"/>
    </settings>
</configuration>

至此,MyBatis已經整合完畢。

使用

DAO層開發

我們直接定義一個由@Mapper註解標註的介面即可,因為MyBatis會掃描由@Mapper註解標註的類,把裡面的@INSERT、@SELECT等註解都解析好,之後實現一些代理的類,通過介面呼叫即可。

一般在DAO層開發中,為了能集中管理表名和欄位等資訊,我們將它們提取出來。定義為TABLE_NAME、INSERT_FIELDS等常量。

插入、查詢、更新方法如下:

@Repository
@Mapper
public interface UserDAO {

    String TABLE_NAME = "user";
    String INSET_FIELDS = " username, password ";
    String SELECT_FIELDS = " id, username, password ";

    @Insert({"insert into ", TABLE_NAME, "(", INSET_FIELDS, ") values (#{userName},#{passWord})"})
    int addUser(User user);

    @Select({"select ", SELECT_FIELDS, " from ", TABLE_NAME, " where userName = #{userName}"})
    User selectUserByUserName(String userName);

    @Update({"update ", TABLE_NAME, " set password = #{passWord} where username = #{userName}"})
    void updateUserPsdByName(User user);

}

測試DAO層

寫個簡單的測試用例:

@Test
public void testOperation(){
    User user1 = new User();
    user1.setUserName("jbw1");
    user1.setPassWord("123456");
    User user2 = new User();
    user2.setUserName("jbw2");
    user2.setPassWord("123456");

    userDAO.addUser(user1);
    userDAO.addUser(user2);

    User resultUser1 = userDAO.selectUserByUserName("jbw1");
    Assert.assertEquals("123456", resultUser1.getPassWord());

    User resultUser2 = userDAO.selectUserByUserName("jbw2");
    resultUser2.setPassWord("233333");
    userDAO.updateUserPsdByName(resultUser2);
    Assert.assertEquals("233333", userDAO.selectUserByUserName("jbw2").getPassWord());

    }

這裡寫圖片描述
跑一下,ok,沒毛病,完成。