1. 程式人生 > >Mybatis的xml修改後自動重新整理(不改原始碼)

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

整合