Mybatis增強(qiáng)版MyBatis-Flex的具體使用
摘要
本文介紹了 Mybatis-Flex,一個(gè)用于增強(qiáng) MyBatis 的框架。相對(duì)于 MyBatis-Plus,Mybatis-Flex提供了一些顯著的特點(diǎn),如支持聯(lián)表查詢以及在Mybatis-Plus中收費(fèi)的功能在Mybatis-Flex中是免費(fèi)的。文章概述了 MyBatis-Flex 的功能特點(diǎn),并深入介紹了聯(lián)表查詢的不同方案。
Mybatis增強(qiáng)版:Mybatis-Plus(使用的最多,老牌Mybatis增強(qiáng)框架,2016年開(kāi)源)、Fluent-MyBatis(阿里云開(kāi)發(fā)的Mybatis增強(qiáng)框架,來(lái)自阿里云.云效產(chǎn)品團(tuán)隊(duì))、Mybatis-Flex??偟膩?lái)說(shuō),Mybatis-Flex相對(duì)于Mybatis-Plus較為顯著的特點(diǎn)是,多了聯(lián)表查詢和在Mybatis-plus中收費(fèi)的Mybatis-Flex免費(fèi)使用。
引言
Mybatis-Flex 是一個(gè)用于增強(qiáng) MyBatis 功能的框架,提供了一系列特性和功能,使得數(shù)據(jù)庫(kù)操作更加靈活且性能更好。本文將介紹 Mybatis-Flex 的功能特點(diǎn)、配置方法、使用步驟以及一些注意事項(xiàng)。
對(duì)比特性
功能或特點(diǎn) | MyBatis-Flex | MyBatis-Plus | Fluent-MyBatis |
---|---|---|---|
對(duì) entity 的基本增刪改查 | ? | ? | ? |
分頁(yè)查詢 | ? | ? | ? |
分頁(yè)查詢之總量緩存 | ? | ? | ? |
分頁(yè)查詢無(wú) SQL 解析設(shè)計(jì)(更輕量,及更高性能) | ? | ? | ? |
多表查詢:from 多張表 | ? | ? | ? |
多表查詢: left join、inner join 等等 | ? | ? | ? |
多表查詢: union,union all | ? | ? | ? |
單主鍵配置 | ? | ? | ? |
多種 id 生成策略 | ? | ? | ? |
支持多主鍵、復(fù)合主鍵 | ? | ? | ? |
字段的 typeHandler 配置 | ? | ? | ? |
除了 MyBatis,無(wú)其他第三方依賴(更輕量) | ? | ? | ? |
QueryWrapper 是否支持在微服務(wù)項(xiàng)目下進(jìn)行 RPC 傳輸 | ? | ? | 未知 |
邏輯刪除 | ? | ? | ? |
樂(lè)觀鎖 | ? | ? | ? |
SQL 審計(jì) | ? | ? | ? |
數(shù)據(jù)填充 | ? | ?? (收費(fèi)) | ? |
數(shù)據(jù)脫敏 | ? | ?? (收費(fèi)) | ? |
字段權(quán)限 | ? | ?? (收費(fèi)) | ? |
字段加密 | ? | ?? (收費(fèi)) | ? |
字典回寫 | ? | ?? (收費(fèi)) | ? |
Db + Row | ? | ? | ? |
Entity 監(jiān)聽(tīng) | ? | ? | ? |
多數(shù)據(jù)源支持 | ? | 借助其他框架或收費(fèi) | ? |
多數(shù)據(jù)源是否支持 Spring 的事務(wù)管理,比如 @Transactional 和 TransactionTemplate 等 | ? | ? | ? |
多數(shù)據(jù)源是否支持 “非Spring” 項(xiàng)目 | ? | ? | ? |
多租戶 | ? | ? | ? |
動(dòng)態(tài)表名 | ? | ? | ? |
動(dòng)態(tài) Schema | ? | ? | ? |
總結(jié):Mybatis-Flex 相對(duì)于 Mybatis-Plus 的顯著特點(diǎn)在于其免費(fèi)支持聯(lián)表查詢功能,而在 Mybatis-Plus 中需要支付費(fèi)用。由于聯(lián)表查詢?cè)谌粘i_(kāi)發(fā)中具有廣泛應(yīng)用,Mybatis-Flex
提供了這一功能,為開(kāi)發(fā)者提供了便利,因此它在這一方面表現(xiàn)出色。
配置方法
配置 Mybatis-Flex 并使用其功能需要遵循以下步驟:
- 導(dǎo)入 Mybatis-Flex 的依賴庫(kù)到項(xiàng)目中: 在項(xiàng)目的構(gòu)建文件(如 Maven 或 Gradle)中添加 Mybatis-Flex 的依賴,以便可以在項(xiàng)目中使用其功能。
- 配置數(shù)據(jù)源和 Mybatis 的基本配置: 在項(xiàng)目的配置文件中配置數(shù)據(jù)庫(kù)連接信息和 Mybatis 的基本配置,確保 Mybatis-Flex可以連接到數(shù)據(jù)庫(kù)并正常工作。這通常包括數(shù)據(jù)庫(kù)URL、用戶名、密碼等配置項(xiàng)。
- 定義實(shí)體類,可以使用注解來(lái)配置表名、字段關(guān)系等: 創(chuàng)建實(shí)體類來(lái)映射數(shù)據(jù)庫(kù)中的表結(jié)構(gòu),可以使用 Mybatis-Flex 提供的注解來(lái)配置實(shí)體類與數(shù)據(jù)庫(kù)表之間的映射關(guān)系,包括表名、字段關(guān)系、主鍵等。這些注解可以幫助 Mybatis-Flex 進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)的映射。
- 編寫 Mapper 接口,繼承 BaseMapper 并定義自定義的查詢方法: 創(chuàng)建 Mapper 接口,繼承 Mybatis-Flex 提供的 BaseMapper 接口。BaseMapper 已經(jīng)提供了一些常用的數(shù)據(jù)庫(kù)操作方法,然后你可以在該接口中添加自定義的查詢方法。這些自定義方法可以利用 Mybatis-Flex 的查詢特性來(lái)實(shí)現(xiàn)更復(fù)雜的數(shù)據(jù)庫(kù)操作。
- 使用 Mybatis-Flex 提供的特性和功能完成數(shù)據(jù)庫(kù)操作: 在業(yè)務(wù)邏輯中使用定義的 Mapper 接口來(lái)完成數(shù)據(jù)庫(kù)操作。可以利用 Mybatis-Flex 提供的特性,如聯(lián)表查詢、條件查詢等,來(lái)更加便捷地完成數(shù)據(jù)庫(kù)操作,提高開(kāi)發(fā)效率。
配置步驟
以下是在項(xiàng)目中配置和使用 Mybatis-Flex
的一般步驟:
- 添加
Mybatis-Flex
的依賴庫(kù)到項(xiàng)目的構(gòu)建文件中(例如Maven 或 Gradle
)。 - 配置數(shù)據(jù)源和
Mybatis
的基本配置,如連接數(shù)據(jù)庫(kù)信息、數(shù)據(jù)源配置等。 - 定義實(shí)體類,使用注解來(lái)描述表名、字段關(guān)系等。
- 編寫
Mapper
接口,繼承BaseMapper
并添加自定義的查詢方法。 - 在配置文件中啟用
Mybatis-Flex
,并配置實(shí)體類的包掃描路徑。 - 在代碼中使用
Mapper
接口的方法來(lái)完成數(shù)據(jù)庫(kù)操作,包括增刪改查等。
1. 添加 Mybatis-Flex 的依賴庫(kù)到項(xiàng)目的構(gòu)建文件中(例如 Maven 或 Gradle): 在項(xiàng)目的構(gòu)建文件中,添加 Mybatis-Flex 的依賴,以便能夠在項(xiàng)目中使用其功能。
<!-- Maven 依賴示例 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-flex</artifactId> <version>1.0.0</version> </dependency>
2. 配置數(shù)據(jù)源和 Mybatis 的基本配置: 在項(xiàng)目的配置文件中,配置數(shù)據(jù)庫(kù)連接信息和 Mybatis 的基本配置,以便 Mybatis-Flex 可以連接數(shù)據(jù)庫(kù)并正常工作。
# 數(shù)據(jù)庫(kù)連接配置示例 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=yourpassword # Mybatis 配置示例 mybatis.config-location=classpath:mybatis-config.xml
3. 定義實(shí)體類,使用注解來(lái)描述表名、字段關(guān)系等: 創(chuàng)建實(shí)體類來(lái)映射數(shù)據(jù)庫(kù)中的表結(jié)構(gòu),使用 Mybatis-Flex 提供的注解來(lái)配置實(shí)體類與數(shù)據(jù)庫(kù)表之間的映射關(guān)系。
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String username; // Getters and setters }
4. 編寫 Mapper 接口,繼承 BaseMapper 并添加自定義的查詢方法: 創(chuàng)建 Mapper 接口,繼承 Mybatis-Flex 提供的 BaseMapper 接口,然后添加自定義的查詢方法。
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface UserMapper extends BaseMapper<User> { // 添加自定義的查詢方法,如根據(jù)用戶名查詢用戶 User findByUsername(String username); }
5. 在配置文件中啟用 Mybatis-Flex,并配置實(shí)體類的包掃描路徑: 在 Mybatis 配置文件(如 mybatis-config.xml)中啟用 Mybatis-Flex,并配置實(shí)體類的包掃描路徑。
<configuration> <!-- 配置 Mybatis-Flex 插件 --> <plugins> <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor"> <!-- 可選的插件配置 --> </plugin> </plugins> <!-- 配置實(shí)體類的包掃描路徑 --> <typeAliasesPackage>com.example.model</typeAliasesPackage> <!-- 其他 Mybatis 配置 --> </configuration>
6. 在代碼中使用 Mapper 接口的方法來(lái)完成數(shù)據(jù)庫(kù)操作,包括增刪改查等: 在業(yè)務(wù)邏輯代碼中,使用定義的 Mapper 接口的方法來(lái)完成數(shù)據(jù)庫(kù)操作,包括增刪改查等。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public User getUserByUsername(String username) { return userMapper.findByUsername(username); } // 其他業(yè)務(wù)邏輯方法 }
通過(guò)按照上述詳細(xì)的步驟和代碼示例進(jìn)行配置和使用 Mybatis-Flex,您將能夠更好地理解如何集成該框架并在項(xiàng)目中進(jìn)行數(shù)據(jù)庫(kù)操作。這些示例將幫助您在實(shí)際開(kāi)發(fā)中更輕松地使用 Mybatis-Flex 的功能。
注意事項(xiàng)
在使用 Mybatis-Flex 進(jìn)行開(kāi)發(fā)時(shí),需要注意以下幾點(diǎn):
當(dāng)使用 Mybatis-Flex 進(jìn)行開(kāi)發(fā)時(shí),以下幾點(diǎn)需要特別注意,以確保您能夠充分利用框架的優(yōu)勢(shì)并順利進(jìn)行數(shù)據(jù)庫(kù)操作:
熟悉 Mybatis-Flex 的特性和功能: 在開(kāi)始項(xiàng)目之前,務(wù)必深入熟悉 Mybatis-Flex 框架的特性和功能。了解框架提供的條件查詢、關(guān)聯(lián)查詢、自定義查詢等功能,以便在實(shí)際開(kāi)發(fā)中能夠恰當(dāng)?shù)貞?yīng)用這些特性來(lái)滿足業(yè)務(wù)需求。
在實(shí)體類中正確配置注解: 在定義實(shí)體類時(shí),使用 Mybatis-Flex 提供的注解來(lái)正確地描述表名、字段關(guān)系等信息。這些注解將幫助框架將實(shí)體類屬性映射到數(shù)據(jù)庫(kù)表,確保數(shù)據(jù)操作時(shí)的一致性。
import com.baomidou.mybatisplus.annotation.TableName; @TableName("user") public class User { // 屬性聲明 }
注意關(guān)聯(lián)查詢的使用: 在調(diào)用 Mapper 接口的方法時(shí),特別是在涉及到關(guān)聯(lián)查詢的情況下,確保您是否需要使用 Mybatis-Flex 提供的關(guān)聯(lián)查詢功能。使用 select***WithRelations()
方法來(lái)觸發(fā)關(guān)聯(lián)查詢,以便獲取相關(guān)聯(lián)的數(shù)據(jù)。
正確配置啟用 Mybatis-Flex 和實(shí)體類掃描路徑: 在 Mybatis 配置文件中,確保啟用 Mybatis-Flex 插件,以便讓框架正常工作。同時(shí),配置實(shí)體類的包掃描路徑,使得框架能夠找到并正確處理實(shí)體類的注解。
<configuration> <!-- 配置 Mybatis-Flex 插件 --> <plugins> <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor"> <!-- 可選的插件配置 --> </plugin> </plugins> <!-- 配置實(shí)體類的包掃描路徑 --> <typeAliasesPackage>com.example.model</typeAliasesPackage> <!-- 其他 Mybatis 配置 --> </configuration>
- 深入理解復(fù)雜操作方案: 當(dāng)涉及到復(fù)雜的多表查詢、關(guān)聯(lián)關(guān)系等操作時(shí),需要更深入地理解 Mybatis-Flex 提供的解決方案。閱讀官方文檔、查看示例代碼,或者嘗試模擬不同場(chǎng)景的操作,以便更好地掌握框架的使用方法。
通過(guò)熟悉特性、正確配置實(shí)體類注解、注意關(guān)聯(lián)查詢、正確配置 Mybatis-Flex 和實(shí)體類掃描路徑,以及深入理解復(fù)雜操作方案,您將能夠更好地應(yīng)用 Mybatis-Flex 框架,提高開(kāi)發(fā)效率并順利完成數(shù)據(jù)庫(kù)操作。
Relations注解
在 MyBatis-Flex 框架中,為了處理不同的關(guān)聯(lián)查詢場(chǎng)景,提供了四個(gè)不同的 Relations 注解。這些注解可以用于配置實(shí)體類之間的關(guān)聯(lián)關(guān)系,從而在進(jìn)行數(shù)據(jù)庫(kù)查詢時(shí)能夠獲取到關(guān)聯(lián)的數(shù)據(jù)。以下是對(duì)這些注解的詳細(xì)解釋以及如何在實(shí)際代碼中使用它們的示例:
RelationOneToOne(一對(duì)一關(guān)系): 用于描述兩個(gè)實(shí)體類之間的一對(duì)一關(guān)系。通常在兩個(gè)實(shí)體類中,一個(gè)類引用另一個(gè)類的實(shí)例。這個(gè)注解用于配置關(guān)聯(lián)的字段和關(guān)系類型。
@TableName("user") public class User { // 屬性聲明 @RelationOneToOne(selfField = "id", targetField = "userId") private UserProfile userProfile; }
RelationOneToMany(一對(duì)多關(guān)系): 用于描述一個(gè)實(shí)體類與多個(gè)其他實(shí)體類之間的一對(duì)多關(guān)系。在主實(shí)體類中,使用集合屬性引用其他實(shí)體類的多個(gè)實(shí)例。
@TableName("user") public class User { // 屬性聲明 @RelationOneToMany(selfField = "id", targetField = "userId") private List<Order> orders; }
RelationManyToOne(多對(duì)一關(guān)系): 用于描述多個(gè)實(shí)體類引用同一個(gè)實(shí)體類的多對(duì)一關(guān)系。在多個(gè)實(shí)體類中,使用單個(gè)屬性引用同一個(gè)實(shí)體類的實(shí)例。
@TableName("order") public class Order { // 屬性聲明 @RelationManyToOne(selfField = "userId", targetField = "id") private User user; }
RelationManyToMany(多對(duì)多關(guān)系): 用于描述多個(gè)實(shí)體類之間的多對(duì)多關(guān)系。通常需要通過(guò)中間表來(lái)實(shí)現(xiàn)這種關(guān)系。
@TableName("user") public class User { // 屬性聲明 @RelationManyToMany(joinTable = "user_role", joinSelfColumn = "user_id", joinTargetColumn = "role_id") private List<Role> roles; }
在使用這些 Relations 注解配置實(shí)體類關(guān)聯(lián)關(guān)系后,需要在通過(guò) BaseMapper 的方法查詢數(shù)據(jù)時(shí),調(diào)用相應(yīng)的 select***WithRelations()
方法才能使 Relations 注解生效。否則,MyBatis-Flex 將自動(dòng)忽略這些 Relations 注解。
例如,對(duì)于上述配置了關(guān)聯(lián)關(guān)系的實(shí)體類,以下是如何在 Mapper 接口中使用 selectListWithRelations()
方法來(lái)查詢數(shù)據(jù)的示例:
@Mapper public interface UserMapper extends BaseMapper<User> { List<User> selectUsersWithRelations(); }
通過(guò)這樣的配置,您就能夠更好地理解并應(yīng)用 MyBatis-Flex 框架中提供的關(guān)聯(lián)關(guān)系注解,并在數(shù)據(jù)庫(kù)查詢時(shí)獲取到關(guān)聯(lián)的數(shù)據(jù)。
總結(jié)
Mybatis-Flex 是一個(gè)用于增強(qiáng) MyBatis 的框架,提供了多種特性和功能來(lái)優(yōu)化數(shù)據(jù)庫(kù)操作。本文簡(jiǎn)要介紹了 Mybatis-Flex 的特點(diǎn),并詳細(xì)說(shuō)明了如何配置和使用其功能。通過(guò)合理的配置和使用,開(kāi)發(fā)者可以更加靈活地進(jìn)行數(shù)據(jù)庫(kù)操作,提高開(kāi)發(fā)效率和代碼質(zhì)量。
參考資料
到此這篇關(guān)于Mybatis增強(qiáng)版MyBatis-Flex的具體使用的文章就介紹到這了,更多相關(guān)MyBatis-Flex使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringMVC中的@RequestMapping注解
這篇文章主要介紹了SpringMVC中@RequestMapping注解,@RequestMapping注解是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,可用于映射一個(gè)請(qǐng)求或一個(gè)方法,可以用在類或方法上,需要的朋友可以參考下2023-07-07springboot整合shiro實(shí)現(xiàn)登錄驗(yàn)證授權(quán)的過(guò)程解析
這篇文章主要介紹了springboot整合shiro實(shí)現(xiàn)登錄驗(yàn)證授權(quán),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01maven項(xiàng)目打jar包并包含所有依賴詳細(xì)教程
maven打包生成的普通jar包,只包含該工程下源碼編譯結(jié)果,不包含依賴內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于maven項(xiàng)目打jar包并包含所有依賴的相關(guān)資料,需要的朋友可以參考下2023-05-05springbooot使用google驗(yàn)證碼的功能實(shí)現(xiàn)
這篇文章主要介紹了springbooot使用google驗(yàn)證碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05springboot構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢的方法
本文主要介紹了springboot怎樣構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11解決Tomcat修改get提交請(qǐng)求亂碼問(wèn)題
這篇文章主要介紹了Tomcat修改get提交請(qǐng)求亂碼問(wèn)題的解決方案,需要的朋友參考下2017-04-04Java notify和notifyAll的區(qū)別和相同
本文主要介紹Java notify和notifyAll的知識(shí),這里整理詳細(xì)的資料來(lái)說(shuō)明notify 和NotifAll的區(qū)別,有需要的小伙伴可以參考下2016-09-09