mybatis免sql插件之JpaMapper-以Jpa hib
2018-12-05 本文已影响12人
逍遥天扬
mybatis免sql插件之JpaMapper-以Jpa hibernate的风格写mybatis(获取spring容器中mybatis的mapper)
简介
JpaMapper以Jpa hibernate的风格写mybatis的代码,可以减少手动写sql的烦恼。
优势:
- 不替换底层实现,仅生成sql并交给mybatis
- 方法基本与Jpa hibernate相似,易于框架替换,当然,没那么厉害,不支持联表哦,项目还在继续完善中。
- 提供简单分表功能
- 逻辑简单,可以拿去自己定制
- 提供分页排序功能,最简单的方法实现分页!
gitee地址:https://gitee.com/ffch/JpaMapper
github地址:https://github.com/ffch/jpa-mapper
本篇作为起始篇,先介绍一下如何从spring容器中获取到mybatis的mapper/bean。
获取mapper
spring环境下,可以使用
@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风格的方法
Jpa hibernate最让人喜欢的风格就是(个人认为):
- 继承CrudRepository提供了最常用的一些方法。
- 使用findBy + 字段即可实现查询。这是所有mybatis的一些mapper工具都不具备的
- 名称我喜欢
这里,我们可以让自己定义的mybatis的mapper继承我们自己写的CrudMapper,并定义与CrudRepository相似的方法。当然,mybatis不能有重复的方法名,因为它的MappedStatement是根据方法名唯一的。
其次,我们使用反射功能,读取CrudMapper中的方法,根据我们的需求(这里找到所有没有加注解的方法)找到对应的方法,我们根据mybatis的生成MappedStatement的方法去生成对应的MappedStatement,并交给mybatis管理,这样就可以实现我们想要的Jpa hibernate风格的dao层代码。
下篇介绍下如何生成MappedStatement。