tk-mybatis 是什么鬼
tk-mybatis https://github.com/abel533/Mapper 是 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 中, 否则执行该方法时会报错.
结尾
暂时遇到这么多需要注意的点, 以后如果再遇到会继续补充的. 如果有错误的地方, 欢迎指正.
来源: http://www.jianshu.com/p/54de4b6db043