- 授权协议: MIT
- 开发语言: Java
- 操作系统: 跨平台
- 软件首页: https://gitee.com/free/Mapper
- 软件文档: https://github.com/abel533/Mapper/wiki
软件介绍
一、通用 Mapper 的用途 ?
我个人最早用 MyBatis 时,先是完全手写,然后用上了 MyBatis 代码生成器(简称为 MBG),在使用 MBG 过程中,发现一个很麻烦的问题,如果数据库字段变化很频繁,就需要反复重新生成代码,并且由于 MBG 覆盖生成代码和追加方式生成 XML,导致每次重新生成都需要大量的比对修改。除了这个问题外,还有一个问题,仅仅基础的增删改查等方法,就已经产生了大量的 XML 内容,还没有添加一个自己手写的方法,代码可能就已经几百行了,内容多,看着比较碍事。
因为很多人都在使用 MBG,MBG 中定义了很多常用的单表方法,为了解决前面提到的问题,也为了兼容 MBG 的方法避免项目重构太多,在 MBG 的基础上结合了部分 JPA 注解产生了通用 Mapper。通用 Mapper 可以很简单的让你获取基础的单表方法,也很方便扩展通用方法。使用通用 Mapper 可以极大的提高你的工作效率。
通过下面的快速入门,会让你尽快的了解基本的用法。
通用 Mapper 诞生于 2014 年 11 月:https://blog.csdn.net/isea533/article/details/41457529
上面文章的设计思路和现在完全不同。
如果想要了解当前的实现原理,可以看下面这篇。
MyBatis 通用 Mapper 实现原理 :https://blog.csdn.net/isea533/article/details/78493852
二、快速入门
为了让你更快速的了解通用 Mapper 的优势,这里会更简洁的让你了解整个过程。
首先在 Maven 项目的 pom.xml 中添加通用 Mapper 依赖:
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>最新版本</version></dependency>
最新版本可以看这里: https://mvnrepository.com/artifact/tk.mybatis/mapper
接下来,开始具体的使用。
1. 配置实体类
通过 MBG 配合 专用代码生成器 可以直接生成实体类等基础代码,为了避免信息量过大,这里当作手工编写和配置。
有如下类:
public class Country implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@KeySql(useGeneratedKeys = true)
private Long id;
private String countryname;
private String countrycode;
//setter 和 getter 方法
}在上面类中,我们给主键添加了 @Id,标记该字段为数据库主键。还有一个通用 Mapper 的特殊注解 @KeySql,配置的 useGeneratedKeys=true 和 MyBatis 中的 useGeneratedKeys 含义相同,意思是说使用 JDBC 的方式获取数据库自增的主键值。
该类对应数据表为 country,因为类名和数据库名对应(当前数据库忽略大小写),因此不需要在类上添加
@Table(name="country")。
经过上面简单的配置后,相当于就有了 MyBatis 中的 关系映射了,特别注意,这个映射关系只对通用 Mapper 有效,自己手写方法时,需要自己处理映射关系。
这部分的详细内容参考文档:对象关系映射
2. 创建 Mapper 接口
根据上述实体类,创建对应的 CountryMapper 接口如下:
import tk.mybatis.mapper.common.Mapper;
public interface CountryMapper extends Mapper<Country> {
}这里继承了 tk.mybatis.mapper.common.Mapper 接口,在接口上指定了泛型类型 Country。当你继承了 Mapper 接口后,此时就已经有了针对 Country 的大量方法,方法如下:
这些方法中和 MBG 生成的大部分方法都一致,还有一部分 MBG 之外的常用方法。
3. 配置通用 Mapper
为了让上述方法可以直接使用,还需要配置通用 Mapper,让项目在启动的时候,把上述方法都自动生成好,这样在运行时就可以使用上面所有的方法。
根据不同的开发环境,需要不同的配置方式,完整的内容可以 集成通用 Mapper,我们这里以最常见的 Spring 和 MyBatis 集成为例。
在集成 Spring 的环境中使用 MyBatis 接口方式时,需要配置 MapperScannerConfigurer,在这种情况下使用通用 Mapper,只需要修改配置如下:
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="扫描包名"/> <!-- 其他配置 --> </bean>
注意官方的包名和这里 tk 包名的区别:
tk.mybatis.spring.mapper.MapperScannerConfigurer
org.mybatis.spring.mapper.MapperScannerConfigurer
只有第一部分从 org 换成了 tk。
此时通用 Mapper 最简单的配置就完成了,完整的配置可以看这里 和 Spring 集成。
4. 简单使用
下面是一个简单的测试用例,实际使用中,可以直接注入 CountryMapper。
public class SpringXmlTest {
private ClassPathXmlApplicationContext context;
@Test
public void testCountryMapper() {
context = new ClassPathXmlApplicationContext("tk/mybatis/mapper/xml/spring.xml");
CountryMapper countryMapper = context.getBean(CountryMapper.class);
//获取全部信息
List<Country> countries = countryMapper.selectAll();
Assert.assertNotNull(countries);
Assert.assertEquals(183, countries.size());
}
}该测试完整地址:Spring 集成测试用例
通用 Mapper 只是提供了基础的大量方法,遇到没有的方法时,你可以正常按照 MyBatis 的用法手写,和正常用法没有任何区别。
5. 了解更多
上面的简单的介绍已经可以应用到真正的项目中了,但是有很多细节这里都没有涉及,如果你准备加入通用 Mapper,你可以先按上述内容引入项目,然后通过更详细的文档去了解更多的细节,有很多你可能想要但是 MBG 不存在的方法,在这里都有,而且如果你想实现自己的通用方法,可以很轻松的进行扩展。
完整文档:https://github.com/abel533/Mapper/wiki
遇到问题提 issues: https://github.com/abel533/Mapper/issues
更多完整项目示例:https://mybatis.tk/samples.html
果子篮开发架构: http://guozilan.tk
MyBatis 交流:点击加入 MyBatis QQ 群
作者信息
作者博客:http://blog.csdn.net/isea533
作者邮箱: abel533@gmail.com
推荐使用 Mybatis 分页插件:PageHelper 分页插件
官方网站:www.mybatis.tk
Uberland
Alex Rosenblat / University of California Press / 2018-11-19 / GBP 21.00
Silicon Valley technology is transforming the way we work, and Uber is leading the charge. An American startup that promised to deliver entrepreneurship for the masses through its technology, Uber ins......一起来看看 《Uberland》 这本书的介绍吧!
