Mybatis的xml修改后自动刷新(不改源码)

有木有小伙伴们使用Mybatis开发后台功能时,遇到修改xml文件一定要重启服务器才能生效,是不是很苦恼,有的小伙伴们举个爪大笑

源码请查看链接: https://pan.baidu.com/s/1bRBHc6

1、首先我们要知道为什么修改的xml没有自动加入到mybatis的缓存

 因为mybatis不知道你文件修改了

2、我们如何告诉mybatis我们文件修改了

很简单,mybatis创建完factory后,我们启动一个线程,一直监控我们的文件就好了,如果发现文件修改就告诉mybatis

重写buildSqlSessionFactory方法

重写buildSqlSessionFactory


3、简单的告诉mybatis刷新这个文件就可以了吗,当然不是。

mybatis如果发现这个文件已经加载过了就不会重新加载就达不到咱们的效果,怎么办呢?重写XMLMapperBuilder的parse方法解析之前先删除就好了

XML解析



4、这样真的可以吗?mybatis没有id重复的校验?当然不是。

org.apache.ibatis.session.Configuration.StrictMap<V>

mybatis添加id到本地缓存


怎么办?我在这个地方也犯愁了,后来发现StrictMap是protected的,可以继承的,只需要继承后重写就好了,说干就干



自己创建的新RefreshStrictMap类,mybatis的Configuration不使用怎么办,好办。重写Configuration类重写getSqlFragments、addMappedStatement、addResultMap、addParameterMap、addCache、addKeyGenerator这些方法,这些方法就是解析mybatis中xml定义的id类型

重写重写

5、最关键的一步来了,如何集成?

我们创建的这些类,mybatis会用吗?当然不会。怎么才能让mybatis用我们的类来加载xml,接下来就说下如何继承

a)使用spring的Configuration注解,创建SqlSessionFactoryBean时用我们自己的

配置

b)使用spring的xml

集成

展开阅读全文

没有更多推荐了,返回首页