模仿mybatis-plus實(shí)現(xiàn)rpc調(diào)用
正文
首先我的目標(biāo)就是 為了把rpc調(diào)用進(jìn)行封裝,讓業(yè)務(wù)人員開發(fā)的時(shí)候 快速使用
組件的整合
pom.xml 整合
<dependency>
<groupId>com.yuye</groupId>
<artifactId>yuye-metadata-spring-boot-starter</artifactId>
</dependency>
假設(shè)你的業(yè)務(wù)package 名為 com.yuye.biz.xxx
新建一個(gè)package 比如com.yuye.biz.xxx.metadata.mapper 新建一個(gè)TestMetadata.java 接口
@MetadataModel("model01")
public interface TestMetadataMapper {
String test();
}
Application 啟動(dòng)類上加
@MetadataModelScan(basePackage = {"com.example.metadata.mapper"})
你需要在MetadataMapperMethod 類中 添加自己的邏輯
優(yōu)化點(diǎn)
- 可以把所有 接口的動(dòng)態(tài)代理都使用這個(gè)組件
- 支持插件化擴(kuò)展MetadataMapperMethod 的邏輯
場景:
1 我需要 在有mybatis的 同時(shí),我要模仿 BaseMapper 接口這種動(dòng)態(tài)代理 底層進(jìn)行rpc調(diào)用
額外考慮:
- mybatis 和 mybatis-plus 共存的情況,會(huì)出現(xiàn) 多次動(dòng)態(tài)代理的情況,怎么保證正確性
- 發(fā)現(xiàn) 拿Object 接動(dòng)態(tài)代理之后的對(duì)象可以,用接口接 就不行
- 對(duì)必要的東西 進(jìn)行cache
背景:
讓以后其他接口 可以自由的實(shí)現(xiàn)自定義動(dòng)態(tài)代理邏輯,
比如現(xiàn)在有mapper 代理 和 metadata代理,之后再來一個(gè) xxx功能,可以快速整合
步驟:
1 組件放到 一個(gè)springboot項(xiàng)目(無mybatis 和 mybatis-plus)
測試通過
2 springboot項(xiàng)目 添加mybatis 進(jìn)行重新測試
測試通過
3 springboot項(xiàng)目 去掉mybatis 添加 mybatis-plus 進(jìn)行重新測試
因?yàn)?mybatis 和mybatis-plus 有沖突,一般項(xiàng)目都是用其中一個(gè)
測試通過
上面這三步是因?yàn)楣卷?xiàng)目中不敢保證都是用 mybatis 或者 mybatis-plus,有可能根據(jù)項(xiàng)目不同,選擇不同的組件,所以我們2個(gè)都要兼容
測試@MapperScan 和 @MetadataModelScan 是否有沖突
總共分幾種情況:
1 各自管各自的
@MetadataModelScan(basePackage = {"com.example.metadata.mapper"})
@MapperScan({"com.example.dao"})
2 @MapperScan 范圍包含@MEtada
@MetadataModelScan(basePackage = {"com.example.metadata.mapper"})
@MapperScan({"com.example"})
報(bào)錯(cuò)
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
是因?yàn)?mapper和 metadata 都掃描到了 這個(gè)接口,多次動(dòng)態(tài)代理,而且我們用的是 @
@Autowired
解決辦法:
1 把package 分開
2 添加@MapperScan的攔截 過濾掉 @MetadataModel ,讓mybatis 不掃描使用
@MetadataModel 的接口
3 @MetadataModelScan 大于 @MapperScan
@MetadataModelScan(basePackage = {"com.example"})
@MapperScan({"com.example.dao"})
測試通過
以上就是模仿mybatis-plus實(shí)現(xiàn)rpc調(diào)用的詳細(xì)內(nèi)容,更多關(guān)于模仿mybatis-plus rpc調(diào)用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳細(xì)說明關(guān)于Java的數(shù)據(jù)庫連接(JDBC)
這篇文章主要介紹了詳細(xì)說明關(guān)于Java的數(shù)據(jù)庫連接JDBC,JDBC是用Java語言向數(shù)據(jù)庫發(fā)送SQL語句,需要的朋友可以參考下面文章內(nèi)容2021-09-09
IDEA 2021.1 操作SVN 最新超詳細(xì)教程(圖文)
本教程將通過idea從svn服務(wù)器中的任意一個(gè)分支檢出代碼(本文采用branches),然后再idea中創(chuàng)建新的分支、提交代碼、拉取代碼、合并分支等操作進(jìn)行一一記錄,暫不包含代碼合并,對(duì)idea2021.1操作svn相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)下吧2021-05-05
Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案
大數(shù)據(jù)量的List集合,需要把List集合中的數(shù)據(jù)批量插入數(shù)據(jù)庫中,本文給大家介紹Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案,感興趣的朋友跟隨小編一起看看吧2024-04-04
SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02

