淺談Springboot下引入mybatis遇到的坑點
一、 springBoot + Mybatis
配置完成後,訪問數據庫遇到的問題
首先出現這個問題,肯定是xml文件與mapper接口沒有匹配上,甚至是xml文件根本沒有被掃描到。
於是會從配置上進行檢查:
1、 xml中的namespace命名是否與mapper接口路徑一致,需保證一致。
2、 application.properties或者application.yml文件中配置mybatis的屬性對否,如下:
第一行 typeAliasesPackage是實體類的包路徑;
第二行mapperLocations:是Mapper的xml文件存放的位置,當xml文件跟對應的Mapper接口處於同一位置的時候可以不用指定
該屬性的值。
3、 啟動類上加註解,如下:
推薦用這種方式掃描Mapper接口,另一種方式是在每一個mapper接口類上加註解
註意,上述兩種方式,必須有一種實現,不然無法啟動項目,會報mapper接口未註入,如下:
綜上,隻要上面幾種情況都配置正確,一般就可以正常啟動,並訪問數據庫。
二、 springBoot + MybatisPlus
pom中需要修改包
我用同樣的原理,準備在springBoot中引入mybatisPlus,但是配置都檢查瞭,依舊報類似的錯誤:
於是根據報錯的信息,究其源碼:
1、 首先由於mybatis通過mapper接口來invoke具體的方法實現,其查詢的key是接口包名加方法名,如果找不到該key,就會報錯,具體代碼如下:
隻有在configuration中找到瞭匹配的key,才會返回key對應的MappedStatement; 同樣調用selectById,可看到一下結果,能夠找到。很明顯而由於上面的selectById1方法是自定義實現的,其xml未被掃描到,還是配置的問題。
然後,再看源碼,為何configuration中找不到自定義的mapper方法,配置哪裡有問題:
MybatisPlusAutoConfiguration是在啟動時,自動會讀取配置信息的,可以看到其中MybatisPlusProperties類型定義瞭前綴mybatis-plus,即隻有前綴為mybatis-plus的配置信息才會被加載,而再看配置文件,如下,恍然大悟,mybatis的配置前綴寫錯瞭,修改成mybatis-plus,成功瞭!!!
後來發現,原來這跟開頭pom文件中導入的包版本有關系,
總結如下:
若使用的是mybatis,則要導入的包是下面這個,並且配置文件中mybatis的配置前綴是“mybatis”。
而若使用的是mybatis-plus,則需要導入的包是下圖,並且配置中mybatis的配置前綴是“mybatis-plus”。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 解決SpringBoot整合MybatisPlus分模塊管理遇到的bug
- SpringBoot整合Mybatis與MybatisPlus方法詳細講解
- Mybatis 一級緩存和二級緩存原理區別
- 小項目改造快速引入 mybatis的流程分析
- 關於springboot中對sqlSessionFactoryBean的自定義