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 中,否则执行该方法时会报错。
结尾
暂时遇到这么多需要注意的点,以后如果再遇到会继续补充的。如果有错误的地方,欢迎指正。😄
网友评论