SpringCloud持久層框架MyBatis Plus的使用與原理解析
在現(xiàn)代微服務(wù)架構(gòu)中,SpringCloud 是一個(gè)非常流行的解決方案。而在數(shù)據(jù)庫操作層面,MyBatis Plus 作為 MyBatis 的增強(qiáng)工具,能夠簡化開發(fā),提升效率,特別是在開發(fā)企業(yè)級(jí)應(yīng)用和分布式系統(tǒng)時(shí)尤為有用。本文將詳細(xì)介紹 MyBatis Plus 的使用方法、原理及其與 MyBatis 的區(qū)別。
一、MyBatis Plus 簡介
1. MyBatis 簡介
MyBatis 是一個(gè)優(yōu)秀的 ORM 框架,它通過 XML 或注解的方式將 Java 方法與 SQL 語句進(jìn)行映射,并且可以靈活地控制 SQL 執(zhí)行的各個(gè)細(xì)節(jié),提供極高的自由度。它廣泛應(yīng)用于項(xiàng)目中,尤其是在對(duì) SQL 語句要求比較嚴(yán)格的場景中。
2. MyBatis Plus 介紹
MyBatis Plus 是在 MyBatis 的基礎(chǔ)上進(jìn)行增強(qiáng)的持久層框架,專注于簡化 MyBatis 的開發(fā)工作。它封裝了常用的 CRUD 操作,極大地減少了開發(fā)者編寫 SQL 的工作量。其目標(biāo)是“更少的配置,更多的功能”,通過插件機(jī)制提供更強(qiáng)大的功能擴(kuò)展。
3. MyBatis 與 MyBatis Plus 的對(duì)比
對(duì)比項(xiàng) | MyBatis | MyBatis Plus |
---|---|---|
核心理念 | 手寫 SQL,靈活但需要大量的 SQL 代碼 | 自動(dòng)化 CRUD,大大減少手寫 SQL |
SQL 編寫 | 需要手動(dòng)編寫所有 SQL 語句 | 提供默認(rèn) CRUD 接口,只需少量自定義 SQL |
復(fù)雜查詢 | 需要手動(dòng)編寫復(fù)雜 SQL 語句 | 提供條件構(gòu)造器,簡化復(fù)雜查詢操作 |
分頁 | 需要手動(dòng)編寫分頁邏輯 | 內(nèi)置分頁插件,簡化分頁操作 |
性能優(yōu)化 | 自定義 SQL 性能優(yōu)化較靈活 | 提供多種插件支持性能優(yōu)化,如 SQL 執(zhí)行分析插件 |
代碼生成 | 不支持代碼生成 | 提供自動(dòng)代碼生成器,支持一鍵生成 Mapper、Service 等 |
擴(kuò)展能力 | 通過配置擴(kuò)展 | 內(nèi)置多種插件機(jī)制,支持?jǐn)U展,如樂觀鎖、審計(jì)等 |
通過這張對(duì)比表可以看出,MyBatis Plus 在開發(fā)效率和功能擴(kuò)展上具有顯著優(yōu)勢(shì),尤其在企業(yè)級(jí)開發(fā)中,可以大大簡化數(shù)據(jù)庫操作的工作。
二、MyBatis Plus 的基本使用
1. 基礎(chǔ)依賴和配置
要在 SpringCloud 中使用 MyBatis Plus,首先需要在項(xiàng)目的 pom.xml
中添加 MyBatis Plus 的依賴:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.4</version> </dependency>
接下來,在 application.yml
中配置數(shù)據(jù)庫連接:
spring: datasource: url: jdbc:mysql://localhost:3306/your_database?useSSL=false username: root password: your_password mybatis-plus: mapper-locations: classpath:/mapper/*.xml
2. 實(shí)體類的定義
在 MyBatis Plus 中,實(shí)體類是映射數(shù)據(jù)庫表的核心。在實(shí)體類中,常用 @TableName
和 @TableId
注解來映射表和主鍵。
@Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; }
3. Mapper 接口的編寫
Mapper 接口是 MyBatis Plus 提供的基礎(chǔ) CRUD 接口,繼承 BaseMapper
就可以擁有常用的 CRUD 功能,無需額外編寫 SQL。
public interface UserMapper extends BaseMapper<User> { }
4. Service 層的實(shí)現(xiàn)
為了更好地管理業(yè)務(wù)邏輯,通常會(huì)在 Service 層中編寫業(yè)務(wù)方法??梢酝ㄟ^注入 Mapper 來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。
@Service public class UserService { @Autowired private UserMapper userMapper; public List<User> getAllUsers() { return userMapper.selectList(null); } public void createUser(User user) { userMapper.insert(user); } }
三、MyBatis Plus 的高級(jí)用法
1. 分頁插件
分頁是大多數(shù)系統(tǒng)必備的功能。MyBatis Plus 內(nèi)置分頁插件,可以通過簡單的配置實(shí)現(xiàn)高效分頁。
@Autowired private UserMapper userMapper; public IPage<User> getUsersPage(int pageNum, int pageSize) { Page<User> page = new Page<>(pageNum, pageSize); return userMapper.selectPage(page, null); }
2. 樂觀鎖插件
MyBatis Plus 支持樂觀鎖,防止多個(gè)用戶同時(shí)修改同一條數(shù)據(jù)時(shí)的并發(fā)問題??梢酝ㄟ^在實(shí)體類上添加 @Version
注解來啟用樂觀鎖功能。
@Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; @Version private Integer version; // 樂觀鎖版本字段 }
3. 多租戶插件
MyBatis Plus 提供了多租戶插件,支持在多租戶架構(gòu)中為每個(gè)租戶分配獨(dú)立的數(shù)據(jù)空間,避免數(shù)據(jù)泄露或沖突。
@Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 多租戶插件配置 TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor(); interceptor.addInnerInterceptor(tenantLineInnerInterceptor); return interceptor; } }
4. 自動(dòng)填充功能
MyBatis Plus 支持自動(dòng)填充常見字段,如創(chuàng)建時(shí)間、更新時(shí)間等。可以通過 @TableField
注解配置字段的自動(dòng)填充策略。
@Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; @TableField(fill = FieldFill.INSERT) private Date createTime; // 自動(dòng)填充創(chuàng)建時(shí)間 @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; // 自動(dòng)填充更新時(shí)間 }
5. 邏輯刪除功能
邏輯刪除是一種不物理刪除數(shù)據(jù),而是通過標(biāo)記刪除狀態(tài)的方式實(shí)現(xiàn)刪除。MyBatis Plus 提供了邏輯刪除支持,可以通過 @TableLogic
注解實(shí)現(xiàn)。
@Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; @TableLogic private Integer deleted; // 邏輯刪除字段 }
四、MyBatis Plus 原理詳解
MyBatis Plus 的原理是基于 MyBatis 的核心功能進(jìn)行增強(qiáng),主要通過 插件機(jī)制 和 代碼生成機(jī)制 提供額外的功能支持。
1. 基于 MyBatis 核心的增強(qiáng)
MyBatis Plus 是對(duì) MyBatis 的擴(kuò)展和增強(qiáng),在 MyBatis 的基礎(chǔ)上引入了大量的插件和自定義功能。例如,通過擴(kuò)展 BaseMapper
,MyBatis Plus 為所有實(shí)體類提供了基礎(chǔ)的 CRUD 功能,開發(fā)者無需編寫重復(fù)的 SQL。
2. 插件機(jī)制
MyBatis Plus 的插件機(jī)制非常靈活,允許開發(fā)者自定義插件,擴(kuò)展 MyBatis Plus 的功能。MyBatis Plus 通過 責(zé)任鏈模式 處理多個(gè)插件請(qǐng)求,插件之間通過 鏈?zhǔn)秸{(diào)用 實(shí)現(xiàn)功能的擴(kuò)展。
常見的插件包括:
- 分頁插件:通過在 SQL 執(zhí)行前后進(jìn)行攔截,實(shí)現(xiàn)分頁功能。
- 多租戶插件:通過在 SQL 中自動(dòng)加入租戶 ID 實(shí)現(xiàn)數(shù)據(jù)隔離。
- 樂觀鎖插件:通過在 SQL 中自動(dòng)加入版本號(hào)實(shí)現(xiàn)并發(fā)控制。
3. 條件構(gòu)造器
MyBatis Plus 提供了 條件構(gòu)造器,簡化了復(fù)雜 SQL 的拼裝過程。條件構(gòu)造器基于 Lambda 表達(dá)式,能夠靈活構(gòu)建動(dòng)態(tài)查詢條件,極大地簡化了 SQL 的編寫工作。
QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User::getName, "Tom").ge(User::getAge, 18 ); List<User> users = userMapper.selectList(queryWrapper);
4. 自動(dòng)代碼生成器
MyBatis Plus 提供了自動(dòng)代碼生成器,支持通過數(shù)據(jù)庫表結(jié)構(gòu)自動(dòng)生成實(shí)體類、Mapper、Service、Controller 等層的代碼,大幅減少手工編寫代碼的工作量。這一特性非常適合大型項(xiàng)目和快速迭代開發(fā)的場景。
5. 動(dòng)態(tài) SQL 解析
MyBatis Plus 支持動(dòng)態(tài) SQL 解析,通過注解或 XML 方式在運(yùn)行時(shí)解析 SQL,生成最終的 SQL 語句。這種方式使得 SQL 編寫更加靈活,能夠適應(yīng)復(fù)雜的業(yè)務(wù)邏輯。
五、MyBatis Plus 的使用總結(jié)
MyBatis Plus 在簡化 MyBatis 開發(fā)工作、提升開發(fā)效率和靈活性方面表現(xiàn)出色。它不僅保留了 MyBatis 的強(qiáng)大 SQL 自定義功能,還通過插件機(jī)制和自動(dòng)化工具提供了更多的擴(kuò)展功能。
MyBatis Plus 的核心優(yōu)勢(shì):
優(yōu)勢(shì) | 說明 |
---|---|
自動(dòng)化 CRUD | 通過內(nèi)置的 CRUD 接口,減少了開發(fā)者手動(dòng)編寫 SQL 的工作量。 |
分頁和多租戶支持 | MyBatis Plus 內(nèi)置分頁和多租戶插件,能夠輕松處理復(fù)雜的查詢場景。 |
性能優(yōu)化 | 通過插件機(jī)制和緩存機(jī)制,MyBatis Plus 提供多種性能優(yōu)化手段,保證高效的數(shù)據(jù)庫操作。 |
代碼生成器 | 自動(dòng)生成常用代碼,提升開發(fā)效率,加快項(xiàng)目開發(fā)速度。 |
總之,MyBatis Plus 是 SpringCloud 項(xiàng)目中非常優(yōu)秀的持久層框架。通過其豐富的功能和靈活的擴(kuò)展機(jī)制,可以大幅提升開發(fā)效率,特別適用于大規(guī)模分布式系統(tǒng)的開發(fā)。
到此這篇關(guān)于SpringCloud持久層框架MyBatis Plus的使用與原理詳解的文章就介紹到這了,更多相關(guān)SpringCloud MyBatis Plus使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java核心編程之文件隨機(jī)讀寫類RandomAccessFile詳解
這篇文章主要為大家詳細(xì)介紹了Java核心編程之文件隨機(jī)讀寫類RandomAccessFile,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08淺談collection標(biāo)簽的oftype屬性能否為java.util.Map
這篇文章主要介紹了collection標(biāo)簽的oftype屬性能否為java.util.Map,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02微信公眾帳號(hào)開發(fā)-自定義菜單的創(chuàng)建及菜單事件響應(yīng)的實(shí)例
本篇文章主要介紹了微信公眾帳號(hào)開發(fā)-自定義菜單的創(chuàng)建及菜單事件響應(yīng)的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12Spring boot如何配置請(qǐng)求的入?yún)⒑统鰠son數(shù)據(jù)格式
這篇文章主要介紹了spring boot如何配置請(qǐng)求的入?yún)⒑统鰠son數(shù)據(jù)格式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Spring Boot部署到Tomcat過程中遇到的問題匯總
這篇文章主要給大家分享了關(guān)于Spring Boot部署到Tomcat過程中遇到的一些問題,文中將解決的方法介紹非常詳細(xì),對(duì)同樣遇到這個(gè)問題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03org.slf4j.Logger中info()方法的使用詳解
這篇文章主要介紹了org.slf4j.Logger中info()方法的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Intellij Idea插件開發(fā)之創(chuàng)建項(xiàng)目層級(jí)的右鍵菜單
這篇文章主要介紹了Intellij Idea插件開發(fā)之創(chuàng)建項(xiàng)目層級(jí)的右鍵菜單,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02SpringBoot實(shí)現(xiàn)excel生成并且通過郵件發(fā)送的步驟詳解
實(shí)際開發(fā)中,特別是在B端產(chǎn)品的開發(fā)中,我們經(jīng)常會(huì)遇到導(dǎo)出excel的功能,更進(jìn)階一點(diǎn)的需要我們定期生成統(tǒng)計(jì)報(bào)表,然后通過郵箱發(fā)送給指定的人員,?今天要帶大家來實(shí)現(xiàn)的就是excel生成并通過郵件發(fā)送,需要的朋友可以參考下2023-10-10