模仿mybatis-plus實現(xiàn)rpc調用
正文
首先我的目標就是 為了把rpc調用進行封裝,讓業(yè)務人員開發(fā)的時候 快速使用
組件的整合
pom.xml 整合
<dependency> <groupId>com.yuye</groupId> <artifactId>yuye-metadata-spring-boot-starter</artifactId> </dependency>
假設你的業(yè)務package 名為 com.yuye.biz.xxx
新建一個package 比如com.yuye.biz.xxx.metadata.mapper 新建一個TestMetadata.java 接口
@MetadataModel("model01") public interface TestMetadataMapper { String test(); }
Application 啟動類上加
@MetadataModelScan(basePackage = {"com.example.metadata.mapper"})
你需要在MetadataMapperMethod 類中 添加自己的邏輯
優(yōu)化點
- 可以把所有 接口的動態(tài)代理都使用這個組件
- 支持插件化擴展MetadataMapperMethod 的邏輯
場景:
1 我需要 在有mybatis的 同時,我要模仿 BaseMapper 接口這種動態(tài)代理 底層進行rpc調用
額外考慮:
- mybatis 和 mybatis-plus 共存的情況,會出現(xiàn) 多次動態(tài)代理的情況,怎么保證正確性
- 發(fā)現(xiàn) 拿Object 接動態(tài)代理之后的對象可以,用接口接 就不行
- 對必要的東西 進行cache
背景:
讓以后其他接口 可以自由的實現(xiàn)自定義動態(tài)代理邏輯,
比如現(xiàn)在有mapper 代理 和 metadata代理,之后再來一個 xxx功能,可以快速整合
步驟:
1 組件放到 一個springboot項目(無mybatis 和 mybatis-plus)
測試通過
2 springboot項目 添加mybatis 進行重新測試
測試通過
3 springboot項目 去掉mybatis 添加 mybatis-plus 進行重新測試
因為 mybatis 和mybatis-plus 有沖突,一般項目都是用其中一個
測試通過
上面這三步是因為公司項目中不敢保證都是用 mybatis 或者 mybatis-plus,有可能根據項目不同,選擇不同的組件,所以我們2個都要兼容
測試@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"})
報錯
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
是因為 mapper和 metadata 都掃描到了 這個接口,多次動態(tài)代理,而且我們用的是 @
@Autowired
解決辦法:
1 把package 分開
2 添加@MapperScan的攔截 過濾掉 @MetadataModel ,讓mybatis 不掃描使用
@MetadataModel 的接口
3 @MetadataModelScan 大于 @MapperScan
@MetadataModelScan(basePackage = {"com.example"}) @MapperScan({"com.example.dao"})
測試通過
以上就是模仿mybatis-plus實現(xiàn)rpc調用的詳細內容,更多關于模仿mybatis-plus rpc調用的資料請關注腳本之家其它相關文章!
相關文章
java基于Des對稱加密算法實現(xiàn)的加密與解密功能詳解
這篇文章主要介紹了java基于Des對稱加密算法實現(xiàn)的加密與解密功能,結合實例形式詳細分析了Des加密算法的功能、原理、使用方法與相關注意事項,需要的朋友可以參考下2017-01-01Java的Cglib動態(tài)代理實現(xiàn)方式詳解
這篇文章主要介紹了Java的Cglib動態(tài)代理實現(xiàn)方式詳解,CGLIB是強大的、高性能的代碼生成庫,被廣泛應用于AOP框架,它底層使用ASM來操作字節(jié)碼生成新的類,為對象引入間接級別,以控制對象的訪問,需要的朋友可以參考下2023-11-11SSH框架網上商城項目第3戰(zhàn)之使用EasyUI搭建后臺頁面框架
SSH框架網上商城項目第3戰(zhàn)之使用EasyUI搭建后臺頁面框架,討論兩種搭建方式:基于frameset和基于easyUI,感興趣的小伙伴們可以參考一下2016-05-05