兄弟們!mybatis-plus是號稱對mybatis本身無侵入的一種加強版。
但是當你引入它的時候,可能會廣泛踩坑。接下來給大家看看我的踩坑歷史。
第一坑:當你選擇的是mybatis-spring-boot-starter+mybatis-plus引入時
pom依賴如下:
<!--mybatis的基礎(chǔ)依賴-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--mybatis-plus依賴-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.1.tmp</version>
</dependency>
這樣。其實,你的mybatis還是你曾經(jīng)的mybatis,只是附加了一些功能。但是,當你開始配置yml文件的時候,諸多小白(如我),可能會直接將一些屬性配置直接替換到mybatis-plus之下。
如:
mybatis-plus:
#mapper路徑
mapper-locations: classpath*:/mapper/*.xml
configuration:
# 是否開啟自動駝峰命名規(guī)則(camel case)映射,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN(下劃線命名) 到經(jīng)典 Java 屬性名 aColumn(駝峰命名) 的類似映射
map-underscore-to-camel-case: true
# 全局地開啟或關(guān)閉配置文件中的所有映射器已經(jīng)配置的任何緩存,默認為 true
cache-enabled: false
#懶加載
#aggressive-lazy-loading: true
#NONE:不啟用自動映射 PARTIAL:只對非嵌套的 resultMap 進行自動映射 FULL:對所有的 resultMap 都進行自動映射
#auto-mapping-behavior: partial
#NONE:不做任何處理 (默認值)WARNING:以日志的形式打印相關(guān)警告信息 FAILING:當作映射失敗處理,并拋出異常和詳細信息
#auto-mapping-unknown-column-behavior: none
#如果查詢結(jié)果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
call-setters-on-nulls: true
# 這個配置會將執(zhí)行的sql打印出來,在開發(fā)或測試的時候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
#表名下劃線命名默認true
table-underline: true
#id類型
id-type: auto
#是否開啟大寫命名,默認不開啟
#capital-mode: false
#邏輯已刪除值,(邏輯刪除下有效) 需要注入邏輯策略LogicSqlInjector 以@Bean方式注入
logic-not-delete-value: 0
#邏輯未刪除值,(邏輯刪除下有效)
logic-delete-value: 1
血淚的教訓?。?!
其實,yml已經(jīng)很好心地提醒了你,比如打mybatis-plus之后沒有屬性提示信息,屬性高亮黃色等等,但是你的配置很可能就是直接CL復制過來的,所以完全不會注意到。

那么此時請記住,現(xiàn)在你的mybatis-plus是沒有mybatis基礎(chǔ)文件的大哥們!?。∧銈兪莾蓚€包?。?!你不是直接引入的mybatis-plus-boot-starter的!??!
因此,該配置在mybatis下的,一個都不能少。比如,駝峰映射。
如果你像我這么配置,明明打開了駝峰映射map-underscore-to-camel-case: true但是鑒于它不是有效的配置,所以它是不會生效的。
當你糾結(jié)為啥你獲取到的參數(shù)都是null的時候,花費了N個小時之后,終于覺得可能是駝峰映射的問題的時候,一個斷點打進來。
喲嚯,發(fā)現(xiàn)了!這個配置是關(guān)閉的哦!

所以需要在mybatis下保留其基礎(chǔ)配置。
如下:
mybatis:
mapper-locations: classpath*:/mapper/*.xml
configuration:
map-underscore-to-camel-case: true
#如果查詢結(jié)果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
call-setters-on-nulls: true
但這樣就沒法直接在yml中操作mybatis-plus了。
第二坑:當你覺得附和兩個包太過麻煩,而且無法配置mybatis-plus的屬性打算直接引入mybatis-plus-boot-starter時
請記住一定要排除掉mybatis-spring-boot-starter這個包,不然很可能會有jar包版本沖突。
mybatis造成的啟動時版本沖突bug示例
因此,我們直接這樣導入包即可
<!--mybatis-plus-starter依賴-->
<!--有了這個依賴之后不要在增加mybatis依賴了,會沖突-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
然后配置文件就可以全部轉(zhuǎn)到mybatis-plus下
如下:
mybatis-plus:
#mapper路徑
mapper-locations: classpath*:/mapper/*.xml
configuration:
# 是否開啟自動駝峰命名規(guī)則(camel case)映射,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN(下劃線命名) 到經(jīng)典 Java 屬性名 aColumn(駝峰命名) 的類似映射
map-underscore-to-camel-case: true
# 全局地開啟或關(guān)閉配置文件中的所有映射器已經(jīng)配置的任何緩存,默認為 true
cache-enabled: false
#懶加載
#aggressive-lazy-loading: true
#NONE:不啟用自動映射 PARTIAL:只對非嵌套的 resultMap 進行自動映射 FULL:對所有的 resultMap 都進行自動映射
#auto-mapping-behavior: partial
#NONE:不做任何處理 (默認值)WARNING:以日志的形式打印相關(guān)警告信息 FAILING:當作映射失敗處理,并拋出異常和詳細信息
#auto-mapping-unknown-column-behavior: none
#如果查詢結(jié)果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
call-setters-on-nulls: true
# 這個配置會將執(zhí)行的sql打印出來,在開發(fā)或測試的時候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
#表名下劃線命名默認true
table-underline: true
#id類型
id-type: auto
#是否開啟大寫命名,默認不開啟
#capital-mode: false
#邏輯已刪除值,(邏輯刪除下有效) 需要注入邏輯策略LogicSqlInjector 以@Bean方式注入
logic-not-delete-value: 0
#邏輯未刪除值,(邏輯刪除下有效)
logic-delete-value: 1
其實yml真的已經(jīng)盡力了!如果你真的已經(jīng)引入了starter包,它的提示就是會生效的配置!
