前言
前天项目中使用了mybatis-plus,但是搭配Jrebel开发项目时,发现修改mapper的xml,或者mapper方法中的注解,Jrebel并没有能够reload mapper.于是就有了本篇文章
探索
为了解决这个问题,首先想到的是到mybatis-plus官网查看配置方法,官网中的文档热加载很清楚说明了
3.0.6版本上移除了该功能,不过最新快照版已加回来并打上废弃标识,3.1.0版本上已完全移除
按照官网配置
@Bean @Profile("dev") // public MybatisMapperRefresh mybatisMapperRefresh (MybatisPlusProperties properties, SqlSessionFactory sessionFactory){ return new MybatisMapperRefresh(properties.resolveMapperLocations(), sessionFactory, true); }
上述配置后重新运行项目,修改mapper,发现并没有生效,于是开始研究他的源码。
通过查看MybatisMapperRefresh
源码发现他的实现方式:重建mapper来实现热加载
的。
XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(resource.getInputStream(), sqlSessionFactory.getConfiguration(), resource.toString(), sqlSessionFactory.getConfiguration().getSqlFragments()); xmlMapperBuilder.parse();
最终定位到关键代码
/** * MybatisPlus 加载 SQL 顺序: * <p>1、加载XML中的SQL</p> * <p>2、加载sqlProvider中的SQL</p> * <p>3、xmlSql 与 sqlProvider不