spring-boot與tk-mybatis的整合
tk-mybatis是什麼鬼
tk-mybatis 是Liuzh開發並開源的Mapper專案,是給使用mybatis開發的小夥伴們提供了一些通用的Mapper集合,省去了編寫大量的基本sql。
你可以根據需求整合需要的模組。
專案文件
https://github.com/abel533/Mapper/wiki
為什麼寫這篇文章
如果你看了上面的文件,不免有個疑問,Liuzh提供的文件貌似很詳細了,為何你還要寫這篇文章呢?其實是因為官方文件只寫了一些簡單的應用,在開發時不免遇到各種各樣的問(大)題(坑)。所以,這篇文章誕生了。
問題彙總
整合及配置
引入包依賴
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.4</version> </dependency>
配置檔案
mapper: mappers: - tk.mybatis.mapper.common.Mapper - tk.mybatis.mapper.common.Mapper2 notEmpty: true
以上是官方給的配置示例,正常情況下,是沒有錯滴,但如果你想用官方提供的擴充套件或者根據自己業務擴充套件,就會出問題鳥。所以,最好自己定義一個BaseMapper。注意,BaseMapper不要與業務Mapper在同一個目錄下!!!
示例:
package com.example.demo.commons; import tk.mybatis.mapper.additional.idlist.IdListMapper; import tk.mybatis.mapper.common.Mapper; public interface BaseMapper<T, PK> extends Mapper<T>, IdListMapper<T, PK> , InsertListMapper<T>{ }
這裡Mapper是 BaseSelectMapper BaseInsertMapper BaseUpdateMapper BaseDeleteMapper 的集合;IdListMapper是SelectByIdListMapper和DeleteByIdListMapper的集合;InsertListMapper提供了批量插入的方法
官方還有別的擴充套件,自己發現吧。
修改後的配置檔案
mapper: mappers: com.example.demo.commons.BaseMapper #通用基礎Mapper類 not-empty: true identity: MYSQL# 生成id的方法 enable-method-annotation: true #是否可以用
注意:這時需要在Application類上新增@tk.mybatis.spring.annotation.MapperScan(basePackages=...)以指定要掃描的包
擴充套件通用方法
mybatis提供了一系列provider,用來提供通用的sql(Mapper.xml對應的sql)
如果需要根據業務擴充套件,可以參照tk-mybatis的實現方法https://github.com/abel533/Mapper/wiki/5.extend ,但有幾點要注意:
- @UpdateProvider 中的method是寫死的,必須是dynamicSQL
- 擴充套件的方法名應該與自己實現的MapperTemplate類裡面的方法對應
- 擴充套件的方法應該再通用的Mapper中定義,不應該單獨寫在某一個業務Mapper 中,否則執行該方法時會報錯。
結尾
暫時遇到這麼多需要注意的點,以後如果再遇到會繼續補充的。如果有錯誤的地方,歡迎指正。:smile: