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

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

六、快速開始
6.1 測試數(shù)據(jù)準備
開始之前,需要準備一個數(shù)據(jù)庫環(huán)境,本教程以操作 MySQL 數(shù)據(jù)庫為例,所以你要準備如下:
安裝 MySQL 數(shù)據(jù)庫; 造一批測試數(shù)據(jù);
6.1.1 安裝 MySQL 數(shù)據(jù)庫環(huán)境;
MySQL 數(shù)據(jù)庫安裝在本地或者云上均可~
至于如何安裝,大家可自行搜索一下安裝步驟就行,非常簡單, 如果想用 Docker 安裝 MySQL 環(huán)境,可參考小哈之前的一篇文章:《一文教您通過 Docker 快速搭建各種測試環(huán)境(Mysql, Redis, ES, MongoDB) | 建議收藏》
6.1.2 準備一點測試數(shù)據(jù);
新建一個名為 test 的測試數(shù)據(jù)庫,創(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 = '用戶表';
再插入一些測試數(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 新建一個 Spring Boot Demo 項目
數(shù)據(jù)庫準備好了,我們新建一個 Spring Boot 項目來講解如何使用 Mybatis-Plus,可以參考小哈之前發(fā)布的文章:《這可能是史上最易懂的 Spring Boot 入門教程》。
測試項目目錄結(jié)構(gòu)如下:

全新的
MyBatis-Plus3.0 版本基于 JDK8,提供了lambda形式的調(diào)用,所以安裝集成 Mybatis-Plus 3.0 要求如下:
JDK 8+; Maven or Gradle, 本文以 maven 作為版本管理工具;
6.3 添加依賴
新建好 Spring Boot 項目后,在 pom.xml 文件中添加以下依賴:
<!-- mybatis-plus 依賴 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!-- 單元測試依賴 -->
<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: 小哈在寫這篇文章的時候,MyBatis-Plus 的最新版本為
3.4.2。
警告:引入
MyBatis-Plus之后請不要再次引入MyBatis以及MyBatis-Spring,以避免因版本差異導(dǎo)致的問題。
6.4 添加配置
接下來,在 applicaiton.yml 配置文件中添加 MySQL 數(shù)據(jù)庫的相關(guān)配置:
# 數(shù)據(jù)庫配置
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ù)庫驅(qū)動、連接、用戶名和密碼。
然后,在 Spring Boot 啟動類中添加 @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 添加實體類
前面已經(jīng)建好了用戶表,下面編寫用戶表對應(yīng)的實體類 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 為表的主鍵,同時指定主鍵為自增類型。
6.6 添加 Mapper 類
編寫 Mapper 類 UserMapper.java :
public interface UserMapper extends BaseMapper<User> {
}
編寫的接口需要繼承 BaseMapper 接口,該接口定義了一些通用的操作數(shù)據(jù)庫方法, 單表大部分 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 開始使用
添加測試類,對用戶表進行增刪改查操作, 測試代碼如下:
@SpringBootTest
class MybatisPlusDemoApplicationTests {
@Autowired
private UserMapper userMapper;
/**
* 查詢數(shù)據(jù)
*/
@Test
public void testSelectUser() {
System.out.println(("----- 開始測試 mybatis-plus 查詢數(shù)據(jù) ------"));
// selectList() 方法的參數(shù)為 mybatis-plus 內(nèi)置的條件封裝器 Wrapper,這里不填寫表示無任何條件,全量查詢
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
}
/**
* 新增一條數(shù)據(jù)
*/
@Test
public void testInsertUser() {
System.out.println(("----- 開始測試 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(("----- 開始測試 mybatis-plus 刪除數(shù)據(jù) ------"));
// 根據(jù)主鍵刪除記錄
userMapper.deleteById(1);
// 根據(jù)主鍵批量刪除記錄
userMapper.deleteBatchIds(Arrays.asList(1, 2));
}
/**
* 更新數(shù)據(jù)
*/
@Test
public void testUpdateUser() {
System.out.println(("----- 開始測試 mybatis-plus 更新數(shù)據(jù) ------"));
User user = User.builder()
.id(1L)
.name("犬小哈教程 www.quanxiaoha.com")
.build();
userMapper.updateById(user);
}
}
七、結(jié)語
本文簡單介紹了在 Spring Boot 中如何快速整合集成 Mybatis-Plus, 同時在本地搭建了一個 Mysql 環(huán)境,演示了如何通過 Mybatis-Plus 做一些簡單的增刪改查(CRUD)操作,其他更豐富的功能,小伙伴們可以參考官網(wǎng) https://baomidou.com/guide。
Ref
https://mybatis.org/mybatis-3/zh/index.html https://baomidou.com/guide
推薦資源
歡迎添加程序汪個人微信 itwang007 進粉絲群或圍觀朋友圈
往期資源 需要請自取
喜歡就"在看"唄^_^
