mybatis免sql插件之JpaMapper-以Jpa hibernate的风格写mybatis(获取spring容器中mybatis的mapper)

mybatis免sql插件之JpaMapper-以Jpa hibernate的风格写mybatis(获取spring容器中mybatis的mapper)

简介

JpaMapper以Jpa hibernate的风格写mybatis的代码,可以减少手动写sql的烦恼。

优势:

  1. 不替换底层实现,仅生成sql并交给mybatis
  2. 方法基本与Jpa hibernate相似,易于框架替换,当然,没那么厉害,不支持联表哦,项目还在继续完善中。
  3. 提供简单分表功能
  4. 逻辑简单,可以拿去自己定制

gitee地址:https://gitee.com/xiaoyaofeiyang/JpaMapper

github地址:https://github.com/feiyangtianyao/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最让人喜欢的风格就是(个人认为):

  1. 继承CrudRepository提供了最常用的一些方法。
  2. 使用findBy + 字段即可实现查询。这是所有mybatis的一些mapper工具都不具备的
  3. 名称我喜欢

这里,我们可以让自己定义的mybatis的mapper继承我们自己写的CrudMapper,并定义与CrudRepository相似的方法。当然,mybatis不能有重复的方法名,因为它的MappedStatement是根据方法名唯一的。

其次,我们使用反射功能,读取CrudMapper中的方法,根据我们的需求(这里找到所有没有加注解的方法)找到对应的方法,我们根据mybatis的生成MappedStatement的方法去生成对应的MappedStatement,并交给mybatis管理,这样就可以实现我们想要的Jpa hibernate风格的dao层代码。

下篇介绍下如何生成MappedStatement。

猜你喜欢

转载自blog.csdn.net/feiyangtianyao/article/details/84554545