什么是 MyBatis Plus?
MyBatis Plus (簡稱 MP) 是一款持久層框架,說白話就是一款操作數據庫的框架。它是一個 MyBatis 的增強工具,就像 iPhone手機一般都有個 plus 版本一樣,它在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
MyBatis Plus 的愿景是成為 MyBatis 最好的搭檔,就像魂斗羅中的 1P、2P,基友搭配,效率翻倍。
MyBatis Plus 的優勢
- 快速開發:MyBatis Plus 提供了一系列的便捷功能,如自動生成 SQL 語句、通用 Mapper 等,使數據庫操作更加高效,能夠節省開發時間。
- 更少的配置: Spring Boot 已經為我們提供了很多默認的配置,整合 MyBatis Plus 時只需少量的配置,減少了繁瑣的配置步驟。
- 內置分頁插件:MyBatis Plus 內置了分頁插件,無需額外的代碼,就可以輕松實現分頁查詢。
- 更好的支持: MyBatis Plus 在社區中有較廣泛的使用,擁有活躍的維護者和開發者,您可以輕松找到解決方案和文檔。
建表
在數據庫右鍵,新建查詢:
執行如下建表語句:
CREATE TABLE `t_user` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',`username` varchar(60) NOT NULL COMMENT '用戶名',`password` varchar(60) NOT NULL COMMENT '密碼',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新時間',`is_deleted` tinyint(2) NOT NULL DEFAULT '0' COMMENT '邏輯刪除:0:未刪除 1:已刪除',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `uk_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';
添加依賴
在父項目 主項目 的?pom.xml
?文件中,聲明 MP 的依賴版本號:
<!-- 版本號統一管理 --><properties>// 省略...<mybatis-plus.version>3.5.2</mybatis-plus.version></properties><!-- 統一依賴管理 --><dependencyManagement><dependencies>// 省略...<!-- Mybatis Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency></dependencies></dependencyManagement>
然后,在 xx-module-common
公共模塊的?pom.xml
?文件中,引入 MP 和 MySQL 依賴:
<!-- Mybatis Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!-- mysql 依賴 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
配置文件
編輯?applicaiton-dev.yml
?文件,添加數據庫鏈接相關的配置,包含連接池的配置:
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/weblog?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNullusername: rootpassword: 123456hikari:minimum-idle: 5maximum-pool-size: 20auto-commit: trueidle-timeout: 30000pool-name: Weblog-HikariCPmax-lifetime: 1800000connection-timeout: 30000connection-test-query: SELECT 1
解釋一下各個配置的含義和作用:
spring.datasource.driver-class-name
: 指定數據庫驅動類的完整類名,這里使用的是 MySQL 數據庫的驅動類。spring.datasource.url
: 數據庫連接的URL,指向本地的MySQL數據庫,端口是3306,數據庫名是xx
,同時配置了一系列參數,如使用Unicode編碼、字符編碼為UTF-8、自動重連、不使用SSL、對零時間進行轉換等。spring.datasource.username
: 數據庫用戶名,這里使用的是root
。spring.datasource.password
: 數據庫密碼,這里使用的是123456
。
數據庫鏈接池這塊,我們使用的 Spring Boot 默認的 HikariCP,它是一個高性能的連接池實現 , 同時,它號稱是速度最快的連接池:
spring.datasource.hikari.minimum-idle
: Hikari連接池中最小空閑連接數。spring.datasource.hikari.maximum-pool-size
: Hikari連接池中允許的最大連接數。spring.datasource.hikari.auto-commit
: 連接是否自動提交事務。spring.datasource.hikari.idle-timeout
: 連接在連接池中閑置的最長時間,超過這個時間會被釋放。spring.datasource.hikari.pool-name
: 連接池的名字。spring.datasource.hikari.max-lifetime
: 連接在連接池中的最大存活時間,超過這個時間會被強制關閉。spring.datasource.hikari.connection-timeout
: 獲取連接的超時時間。spring.datasource.hikari.connection-test-query
: 用于測試連接是否可用的SQL查詢,這里使用的是SELECT 1
,表示執行這個查詢來測試連接。
然后,在 xx-module-common
?模塊中的?config
?包下,新建一個?MybatisPlusConfig
?配置文件,代碼如下:
package com.yanxiaosheng.xx.common.config;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;/*** @author: 閆小生* @date: 2023-08-22 16:52* @description: Mybatis Plus 配置文件**/
@Configuration
@MapperScan("com.quanxiaoha.weblog.common.domain.mapper")
public class MybatisPlusConfig {
}
-
@Configuration
?: 此注解聲明該類為配置類; -
@MapperScan
?: 掃描 MP 的?mapper
?接口存放位置。PS: 數據庫相關的代碼,我們統一放置在?/domain
?這個包中,格式如下:dos
?: 根據阿里的開發規范,統一將數據庫對應的實體類命名為?xxxDO
?這種形式,統一存放此包下。mapper
?: 統一放置?mapper
?接口文件;
實體類
在?/dos
?包中,新建一個?UserDO
?類,字段和數據庫中的字段通過轉駝峰的形式對應一一對應起來,MP 框架會默認通過這種規則將字段光聯在一起,內容如下:
package com.yanxiaosheng.xx.common.domain.dos;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;/*** @author: 閆小生* @date: 2023-08-22 17:01* @description: TODO**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName("t_user")
public class UserDO {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private Date createTime;private Date updateTime;private Boolean isDeleted;
}
新建 Mapper 接口
在?mapper
包中,創建一個?UserMapper
?接口,代碼如下:
package com.yanxiaosheng.xx.common.domain.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.quanxiaoha.weblog.common.domain.dos.UserDO;/*** @author: 閆小生* @date: 2023-08-22 17:06* @description: TODO**/
public interface UserMapper extends BaseMapper<UserDO> {
}
至此,用于操作數據的前置代碼都搞定了。
新增一條用戶記錄
接下來,我們通過單元測試,往數據庫中添加一個測試記錄,看看能否新增成功。在 xx-web
?模塊中的單元測試類中,新增一個測試方法,代碼如下:
@Autowiredprivate UserMapper userMapper;@Testvoid insertTest() {// 構建數據庫實體類UserDO userDO = UserDO.builder().username("閆小生").password("123456").createTime(new Date()).updateTime(new Date()).isDeleted(false).build();userMapper.insert(userDO);}
運行該測試方法,看看表中是否被成功插入一條數據:
可以看到,數據插入成功了。