我我的最先用 MyBatis 时,先是彻底手写,而后用上了 MyBatis 代码生成器(简称为 MBG),在使用 MBG 过程当中,发现一个很麻烦的问题,若是数据库字段变化很频繁,就须要反复从新生成代码,而且因为 MBG 覆盖生成代码和追加方式生成 XML,致使每次从新生成都须要大量的比对修改。除了这个问题外,还有一个问题,仅仅基础的增删改查等方法,就已经产生了大量的 XML 内容,尚未添加一个本身手写的方法,代码可能就已经几百行了,内容多,看着比较碍事。spring
由于不少人都在使用 MBG,MBG 中定义了不少经常使用的单表方法,为了解决前面提到的问题,也为了兼容 MBG 的方法避免项目重构太多,在 MBG 的基础上结合了部分 JPA 注解产生了通用 Mapper。通用 Mapper 能够很简单的让你获取基础的单表方法,也很方便扩展通用方法。使用通用 Mapper 能够极大的提升你的工做效率。数据库
为了让你更快速的了解通用 Mapper 的优点,这里会更简洁的让你了解整个过程。mybatis
首先在 Maven 项目的 pom.xml 中添加通用 Mapper 依赖:架构
接下来,开始具体的使用。app
经过 MBG 配合 专用代码生成器 能够直接生成实体类等基础代码,为了不信息量过大,这里看成手工编写和配置。学习
有以下类:测试
在上面类中,咱们给主键添加了 @Id,标记该字段为数据库主键。还有一个通用 Mapper 的特殊注解 @KeySql,配置的 useGeneratedKeys = true 和 MyBatis 中的 useGeneratedKeys 含义相同,意思是说使用 JDBC 的方式获取数据库自增的主键值。spa
通过上面简单的配置后,至关于就有了 MyBatis 中的 <resultMap> 关系映射了,特别注意,这个映射关系只对通用 Mapper 有效,本身手写方法时,须要本身处理映射关系。给你们推荐一个Java架构交流群:874811168 进群一块儿学习,一块儿进步。xml
根据上述实体类,建立对应的 CountryMapper 接口以下:blog
这里继承了 tk.mybatis.mapper.common.Mapper 接口,在接口上指定了泛型类型 Country。当你继承了 Mapper 接口后,此时就已经有了针对 Country 的大量方法,方法以下:
这些方法中和 MBG 生成的大部分方法都一致,还有一部分 MBG 以外的经常使用方法。
为了让上述方法能够直接使用,还须要配置通用 Mapper,让项目在启动的时候,把上述方法都自动生成好,这样在运行时就可使用上面全部的方法。
根据不一样的开发环境,须要不一样的配置方式,完整的内容能够 集成通用 Mapper,咱们这里以最多见的 Spring 和 MyBatis 集成为例。
在集成 Spring 的环境中使用 MyBatis 接口方式时,须要配置 MapperScannerConfigurer,在这种状况下使用通用 Mapper,只须要修改配置以下:
注意官方的包名和这里 tk 包名的区别:
1.tk.mybatis.spring.mapper.MapperScannerConfigurer
2.org.mybatis.spring.mapper.MapperScannerConfigurer
3.给你们推荐一个Java架构交流群:874811168 进群一块儿学习
只有第一部分从 org 换成了 tk。
此时通用 Mapper 最简单的配置就完成了,完整的配置能够看这里 和 Spring 集成。
下面是一个简单的测试用例,实际使用中,能够直接注入 CountryMapper。
该测试完整地址:Spring 集成测试用例
通用 Mapper 只是提供了基础的大量方法,遇到没有的方法时,你能够正常按照 MyBatis 的用法手写,和正经常使用法没有任何区别。
上面的简单的介绍已经能够应用到真正的项目中了,可是有不少细节这里都没有涉及,若是你准备加入通用 Mapper,你能够先按上述内容引入项目,而后经过更详细的文档去了解更多的细节,有不少你可能想要可是 MBG 不存在的方法,在这里都有,并且若是你想实现本身的通用方法,能够很轻松的进行扩展。