Spring Boot 快速整合 Mybatis-Plus 入門教程 !解放生產(chǎn)力 !

大家好,我是犬小哈!
今天給大家?guī)?lái)一篇如何在 Spring Boot 中快速整合 Mybatis-Plus 的入門教程,希望對(duì)大家有所幫助。
一、先說(shuō)說(shuō) MyBatis
在說(shuō) MyBatis-Plus 之前,小哈帶小伙伴們先了解下什么是 MyBatis:
MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對(duì)象)為數(shù)據(jù)庫(kù)中的記錄。
PS: 下面 Mybatis-Plus 的介紹以及特性講解部分摘自官網(wǎng),畢竟官網(wǎng)的說(shuō)明更權(quán)威。
二、MyBatis-Plus 和 Mybatis 有啥區(qū)別?
MyBatis-Plus (opens new window)(簡(jiǎn)稱 MP)是一個(gè) MyBatis (opens new window)的增強(qiáng)工具,就像 IPhone手機(jī)一般都有個(gè) plus 版本一樣,它在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生。
MyBatis-Plus 的愿景是成為 MyBatis 最好的搭檔,就像魂斗羅中的 1P、2P,基友搭配,效率翻倍。
三、MyBatis-Plus 的特性
無(wú)侵入:只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,如絲般順滑 損耗小:?jiǎn)?dòng)即會(huì)自動(dòng)注入基本 CURD,性能基本無(wú)損耗,直接面向?qū)ο蟛僮?/section> 強(qiáng)大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過(guò)少量配置即可實(shí)現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿足各類使用需求 支持 Lambda 形式調(diào)用:通過(guò) Lambda 表達(dá)式,方便的編寫各類查詢條件,無(wú)需再擔(dān)心字段寫錯(cuò) 支持主鍵自動(dòng)生成:支持多達(dá) 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問(wèn)題 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實(shí)體類只需繼承 Model 類即可進(jìn)行強(qiáng)大的 CRUD 操作 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere ) 內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來(lái)使用 內(nèi)置分頁(yè)插件:基于 MyBatis 物理分頁(yè),開發(fā)者無(wú)需關(guān)心具體操作,配置好插件之后,寫分頁(yè)等同于普通 List 查詢 分頁(yè)插件支持多種數(shù)據(jù)庫(kù):支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數(shù)據(jù)庫(kù) 內(nèi)置性能分析插件:可輸出 Sql 語(yǔ)句以及其執(zhí)行時(shí)間,建議開發(fā)測(cè)試時(shí)啟用該功能,能快速揪出慢查詢 內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作
四、MyBatis-Plus 支持哪些數(shù)據(jù)庫(kù) ?
簡(jiǎn)單來(lái)說(shuō),MyBatis 支持的數(shù)據(jù)庫(kù),MyBatis-Plus 都支持, 如 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等。
五、框架結(jié)構(gòu)

六、快速開始
6.1 測(cè)試數(shù)據(jù)準(zhǔn)備
開始之前,需要準(zhǔn)備一個(gè)數(shù)據(jù)庫(kù)環(huán)境,本教程以操作 MySQL 數(shù)據(jù)庫(kù)為例,所以你要準(zhǔn)備如下:
安裝 MySQL 數(shù)據(jù)庫(kù); 造一批測(cè)試數(shù)據(jù);
6.1.1 安裝 MySQL 數(shù)據(jù)庫(kù)環(huán)境;
MySQL 數(shù)據(jù)庫(kù)安裝在本地或者云上均可~
至于如何安裝,大家可自行搜索一下安裝步驟就行,非常簡(jiǎn)單, 如果想用 Docker 安裝 MySQL 環(huán)境,可參考小哈之前的一篇文章:《一文教您通過(guò) Docker 快速搭建各種測(cè)試環(huán)境(Mysql, Redis, ES, MongoDB) | 建議收藏》
6.1.2 準(zhǔn)備一點(diǎn)測(cè)試數(shù)據(jù);
新建一個(gè)名為 test 的測(cè)試數(shù)據(jù)庫(kù),創(chuàng)建一張用戶表,Schema 建表腳本如下:
DROP TABLE IF EXISTS user;
CREATE TABLE `user` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名',
`age` int(11) NULL DEFAULT NULL COMMENT '年齡',
`gender` tinyint(2) NOT NULL DEFAULT 0 COMMENT '性別,0:女 1:男',
PRIMARY KEY (`id`)
) COMMENT = '用戶表';
再插入一些測(cè)試數(shù)據(jù):
DELETE FROM user;
INSERT INTO user (name, age, gender) VALUES
('犬小哈1', 16, 0),
('犬小哈2', 18, 1),
('犬小哈3', 20, 0),
('犬小哈4', 28, 1),
('犬小哈5', 30, 0);
6.2 新建一個(gè) Spring Boot Demo 項(xiàng)目
數(shù)據(jù)庫(kù)準(zhǔn)備好了,我們新建一個(gè) Spring Boot 項(xiàng)目來(lái)講解如何使用 Mybatis-Plus,可以參考小哈之前發(fā)布的文章:《這可能是史上最易懂的 Spring Boot 入門教程》。
測(cè)試項(xiàng)目目錄結(jié)構(gòu)如下:

全新的
MyBatis-Plus3.0 版本基于 JDK8,提供了lambda形式的調(diào)用,所以安裝集成 Mybatis-Plus 3.0 要求如下:
JDK 8+; Maven or Gradle, 本文以 maven 作為版本管理工具;
6.3 添加依賴
新建好 Spring Boot 項(xiàng)目后,在 pom.xml 文件中添加以下依賴:
<!-- mybatis-plus 依賴 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!-- 單元測(cè)試依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- lombok 依賴 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
<!-- mysql 依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
PS: 小哈在寫這篇文章的時(shí)候,MyBatis-Plus 的最新版本為
3.4.2。
警告:引入
MyBatis-Plus之后請(qǐng)不要再次引入MyBatis以及MyBatis-Spring,以避免因版本差異導(dǎo)致的問(wèn)題。
6.4 添加配置
接下來(lái),在 applicaiton.yml 配置文件中添加 MySQL 數(shù)據(jù)庫(kù)的相關(guān)配置:
# 數(shù)據(jù)庫(kù)配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
username: root
password: qwe123
配置好數(shù)據(jù)庫(kù)驅(qū)動(dòng)、連接、用戶名和密碼。
然后,在 Spring Boot 啟動(dòng)類中添加 @MapperScan 注解,配置好 Mapper 文件夾的全路徑,作用是為了 mybatis-plus 能夠掃描到:
@SpringBootApplication
@MapperScan("com.quanxiaoha.mybatisplusdemo.mapper")
public class MybatisPlusDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusDemoApplication.class, args);
}
}
6.5 添加實(shí)體類
前面已經(jīng)建好了用戶表,下面編寫用戶表對(duì)應(yīng)的實(shí)體類 User.java :
@Data
@Builder
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private Integer gender;
}
@TableId(type = IdType.AUTO) 注解指定了字段 id 為表的主鍵,同時(shí)指定主鍵為自增類型。
6.6 添加 Mapper 類
編寫 Mapper 類 UserMapper.java :
public interface UserMapper extends BaseMapper<User> {
}
編寫的接口需要繼承 BaseMapper 接口,該接口定義了一些通用的操作數(shù)據(jù)庫(kù)方法, 單表大部分 CRUD 操作都能直接搞定,相比原生的 mybatis,效率提高了很多:
public interface BaseMapper<T> extends Mapper<T> {
int insert(T entity);
int deleteById(Serializable id);
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
int delete(@Param("ew") Wrapper<T> queryWrapper);
int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
int updateById(@Param("et") T entity);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
T selectById(Serializable id);
List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
T selectOne(@Param("ew") Wrapper<T> queryWrapper);
Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
<E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}
6.7 開始使用
添加測(cè)試類,對(duì)用戶表進(jìn)行增刪改查操作, 測(cè)試代碼如下:
@SpringBootTest
class MybatisPlusDemoApplicationTests {
@Autowired
private UserMapper userMapper;
/**
* 查詢數(shù)據(jù)
*/
@Test
public void testSelectUser() {
System.out.println(("----- 開始測(cè)試 mybatis-plus 查詢數(shù)據(jù) ------"));
// selectList() 方法的參數(shù)為 mybatis-plus 內(nèi)置的條件封裝器 Wrapper,這里不填寫表示無(wú)任何條件,全量查詢
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
}
/**
* 新增一條數(shù)據(jù)
*/
@Test
public void testInsertUser() {
System.out.println(("----- 開始測(cè)試 mybatis-plus 插入數(shù)據(jù) ------"));
User user = User.builder()
.name("犬小哈教程 www.quanxiaoha.com")
.age(30)
.gender(1)
.build();
userMapper.insert(user);
}
/**
* 刪除數(shù)據(jù)
*/
@Test
public void testDeleteUser() {
System.out.println(("----- 開始測(cè)試 mybatis-plus 刪除數(shù)據(jù) ------"));
// 根據(jù)主鍵刪除記錄
userMapper.deleteById(1);
// 根據(jù)主鍵批量刪除記錄
userMapper.deleteBatchIds(Arrays.asList(1, 2));
}
/**
* 更新數(shù)據(jù)
*/
@Test
public void testUpdateUser() {
System.out.println(("----- 開始測(cè)試 mybatis-plus 更新數(shù)據(jù) ------"));
User user = User.builder()
.id(1L)
.name("犬小哈教程 www.quanxiaoha.com")
.build();
userMapper.updateById(user);
}
}
七、結(jié)語(yǔ)
本文簡(jiǎn)單介紹了在 Spring Boot 中如何快速整合集成 Mybatis-Plus, 同時(shí)在本地搭建了一個(gè) Mysql 環(huán)境,演示了如何通過(guò) Mybatis-Plus 做一些簡(jiǎn)單的增刪改查(CRUD)操作,其他更豐富的功能,小伙伴們可以參考官網(wǎng) https://baomidou.com/guide。
PS: 本文同步發(fā)布在犬小哈教程網(wǎng) www.quanxiaoha.com 上,PC 端查看教程直接訪問(wèn)網(wǎng)站即可~
Ref
https://mybatis.org/mybatis-3/zh/index.html https://baomidou.com/guide

1. 大白話說(shuō)清楚 Java 中的 this 和 super 關(guān)鍵字!
2. 基于SpringBoot 的CMS系統(tǒng),拿去開發(fā)企業(yè)官網(wǎng)真香
3. 跳表 【會(huì)跳的鏈表原來(lái)這么diao】
4. 2020 國(guó)內(nèi)互聯(lián)網(wǎng)公司的薪酬、加班時(shí)長(zhǎng)排名 !
最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。
謝謝支持喲 (*^__^*)
