mybatis免sql插件之JpaMapper-以Jpa hibernate的風(fēng)格寫(xiě)mybatis(獲取spring容器中mybatis的mapper)
簡(jiǎn)介
JpaMapper以Jpa hibernate的風(fēng)格寫(xiě)mybatis的代碼僻族,可以減少手動(dòng)寫(xiě)sql的煩惱。
優(yōu)勢(shì):
- 不替換底層實(shí)現(xiàn),僅生成sql并交給mybatis
- 方法基本與Jpa hibernate相似农猬,易于框架替換需五,當(dāng)然薪铜,沒(méi)那么厲害漆弄,不支持聯(lián)表哦脚草,項(xiàng)目還在繼續(xù)完善中酷誓。
- 提供簡(jiǎn)單分表功能
- 邏輯簡(jiǎn)單披坏,可以拿去自己定制
- 提供分頁(yè)排序功能,最簡(jiǎn)單的方法實(shí)現(xiàn)分頁(yè)盐数!
gitee地址:https://gitee.com/ffch/JpaMapper
github地址:https://github.com/ffch/jpa-mapper
本篇作為起始篇棒拂,先介紹一下如何從spring容器中獲取到mybatis的mapper/bean。
獲取mapper
spring環(huán)境下玫氢,可以使用
@Autowired
private List<SqlSessionFactory> sqlSessionFactoryList;
獲取到mybatis的SqlSessionFactory帚屉,SqlSessionFactory有你想要的一切mybatis配置。
比如mapper的class信息:
for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {
Configuration configuration = sqlSessionFactory.getConfiguration();
MapperRegistry mapperRegistry = configuration.getMapperRegistry();
List<Class<?>> mappers = new ArrayList<>(mapperRegistry.getMappers());
}
這樣就拿到了List<Class<?>> mappers漾峡。
定義自己的JPA風(fēng)格的方法
Jpa hibernate最讓人喜歡的風(fēng)格就是(個(gè)人認(rèn)為):
- 繼承CrudRepository提供了最常用的一些方法攻旦。
- 使用findBy + 字段即可實(shí)現(xiàn)查詢。這是所有mybatis的一些mapper工具都不具備的
- 名稱(chēng)我喜歡
這里生逸,我們可以讓自己定義的mybatis的mapper繼承我們自己寫(xiě)的CrudMapper牢屋,并定義與CrudRepository相似的方法。當(dāng)然槽袄,mybatis不能有重復(fù)的方法名烙无,因?yàn)樗腗appedStatement是根據(jù)方法名唯一的。
其次掰伸,我們使用反射功能皱炉,讀取CrudMapper中的方法,根據(jù)我們的需求(這里找到所有沒(méi)有加注解的方法)找到對(duì)應(yīng)的方法狮鸭,我們根據(jù)mybatis的生成MappedStatement的方法去生成對(duì)應(yīng)的MappedStatement合搅,并交給mybatis管理多搀,這樣就可以實(shí)現(xiàn)我們想要的Jpa hibernate風(fēng)格的dao層代碼。
下篇介紹下如何生成MappedStatement灾部。