淺談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。

推薦閱讀: