從零搭建Spring Boot腳手架(3):集成mybatis


1. 前言

今天繼續搭建我們的kono Spring Boot腳手架,上一文集成了一些基礎的功能,比如統一返回體、統一異常處理、快速類型轉換、參數校驗等常用必備功能,並編寫了一些單元測試進行驗證,今天把國內最流行的ORM框架Mybatis也集成進去。使用的Spring Boot版本為2.3.2.RELEASE

Gitee: https://gitee.com/felord/kono 1.0.0.MYBATIS 分支

GitHub: https://github.com/NotFound403/kono 1.0.0.MYBATIS 分支

2. 集成Mybatis的步驟

集成Mybatis的步驟並不是特別復雜,我將它們分為三個步驟,接下來進入正題。

3. 依賴集成

首先我將MybatisStarter加入kono-dependencies進行依賴管理,並在kono-app引入:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>

mybatis starter的附加依賴

通過IDEAMaven插件可以看出我們引入了MybatisStarter之后,高性能的數據源連接池就被集成了進來。但是數據庫驅動需要我們自行引入,這里我們直接引用MySQL的依賴:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

4. 配置

配置是最重要的部分,我們來分層次講解配置。

4.1 先配置數據源

數據源在application.yml中的配置前綴為spring.datasource。那么基本的配置如下:

spring:
  datasource:
    # 連接池實現的限定名,這里使用hikari連接池。一般不用配置這個,會自動去類路徑下加載,這是一個可選的配置。
    # type: com.zaxxer.hikari.HikariDataSource
    # 數據庫的驅動JDBC驅動程序的類全限定名,它其實會根據下面的url配置自動檢測,這是一個可選配置。
    # driver-class-name: com.mysql.cj.jdbc.Driver
    # 數據庫的JDBC鏈接
    url: jdbc:mysql://ip:port/database
    # 數據庫用戶名
    username:
    # 數據庫密碼
    password:

hikari連接池的配置可以根據需要自行通過spring.datasource.hikari進行配置,這里先采用默認,后續如果有需要再進行修改。

com.mysql.jdbc.Driver已經標記為過時,現在請使用com.mysql.cj.jdbc.Driver

4.2 mybatis配置

mybatis的基本配置也不是特別多,你只需要讓Mybatis知道從哪里加載你定義的Mapper接口,從哪里加載對應的*Mapper.xml文件,然后配置一些mybatis的特性,復雜的騷操作可以從我以往mybatis相關的文章去看一下。

我新建了一張表user_info,並創建了對應的實體類UserInfo,接着就是定義Mapper接口的位置。假如說我把所有的Mapper接口放在cn.felord.kono.mapper包下,那么就應該使用@MapperScan來標識這個路徑,引導mybatis找到這些Mapper接口。

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

/**
 * mybatis configuration.
 *
 * @author felord.cn
 */
@MapperScan("cn.felord.kono.mapper")
@Configuration
public class MybatisConfiguration {

}

接着我們編寫UserInfo對應的UserInfoMapper接口,並增加一個新增方法。這里可以根據IDE去插件市場下載一些mybatis插件來方便我們開發,關鍵字搜索mybatis即可,這里我隨便找了一個插件安裝。通過IDEAALT+ENTER快捷鍵調出了一個生成UserInfoMapper對應XML的菜單,我們可以使用它來生成XML文件以及對應方法的語句。

mybatis 插件生成 xml

mybatis 插件生成語句模板,請無視返回值的問題

XML文件的位置我們放在resources下的mapper文件夾中,編譯后就是類路徑下的mapper文件夾中,所以需要在application.yml進行如下配置。

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

對應的UserInfoMapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.felord.kono.mapper.UserInfoMapper">
    <insert id="save" parameterType="cn.felord.kono.entity.UserInfo">
        insert into user_info (name, age)
        VALUES (#{name}, #{age})
    </insert>
</mapper>

然后測試一下新增成功了沒有問題,但是查詢的單元測試卻沒有通過:

@Test
void testUserInfoMapperFindById(){

    UserInfo userInfo = userInfoMapper.findById(3);

    System.out.println("userInfo = " + userInfo);
    Assertions.assertEquals(3,userInfo.getUserId());

}

這是因為駝峰轉下划線的問題造成了,user_id無法注入到userId中,所以要聲明以下配置來支持下划線轉駝峰就可以了:

mybatis:
  configuration:
      map-underscore-to-camel-case: true

如何打印SQL語句呢?只需要聲明Mapper接口包的日志級別為DEBUG就可以了。

logging:
  level:
    cn.felord.kono.mapper: debug

5. 總結

到這里基本的mybatis整合就完成了,你可以從項目倉庫拉下來,自己配置一個數據庫跑一下。多多關注:碼農小胖哥 繼續來和我一起整合腳手架。

關注公眾號:Felordcn 獲取更多資訊

個人博客:https://felord.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM