版权声明:版权归博主所有,转载请带上本文链接!联系方式:abel533@gmail.com                        https://blog.csdn.net/isea533/article/details/83045335                    </div>

在早期项目文档中有过类似主题的内容,但是最近我自己看文档的时候发现一个问题,文档虽然很详细,但是并不适合初次接触的人。为了方便第一次听说,第一次尝试的开发人员了解通用 Mapper,补充此文档。

一、通用 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>
  • 1
  • 2
  • 3
  • 4
  • 5

最新版本可以看这里: 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;
<span class="token comment">//setter 和 getter 方法</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在上面类中,我们给主键添加了 @Id,标记该字段为数据库主键。还有一个通用 Mapper 的特殊注解 @KeySql,配置的 useGeneratedKeys = true 和 MyBatis 中的 useGeneratedKeys 含义相同,意思是说使用 JDBC 的方式获取数据库自增的主键值。

该类对应数据表为 country,因为类名和数据库名对应(当前数据库忽略大小写),因此不需要在类上添加 @Table(name = "country")

经过上面简单的配置后,相当于就有了 MyBatis 中的 <resultMap> 关系映射了,特别注意,这个映射关系只对通用 Mapper 有效,自己手写方法时,需要自己处理映射关系

这部分的详细内容参考文档:对象关系映射

2. 创建 Mapper 接口

根据上述实体类,创建对应的 CountryMapper 接口如下:

import tk.mybatis.mapper.common.Mapper;

public interface CountryMapper extends Mapper<Country> {

}

  • 1
  • 2
  • 3
  • 4
  • 5

这里继承了 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>
  • 1
  • 2
  • 3
  • 4

注意官方的包名和这里 tk 包名的区别:

  • tk.mybatis.spring.mapper.MapperScannerConfigurer
  • org.mybatis.spring.mapper.MapperScannerConfigurer

只有第一部分从 org 换成了 tk

此时通用 Mapper 最简单的配置就完成了,完整的配置可以看这里 和 Spring 集成

4. 简单使用

下面是一个简单的测试用例,实际使用中,可以直接注入 CountryMapper

public class SpringXmlTest {
<span class="token keyword">private</span> ClassPathXmlApplicationContext context<span class="token punctuation">;</span><span class="token annotation punctuation">@Test</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testCountryMapper</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>context <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ClassPathXmlApplicationContext</span><span class="token punctuation">(</span><span class="token string">"tk/mybatis/mapper/xml/spring.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>CountryMapper countryMapper <span class="token operator">=</span> context<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span>CountryMapper<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//获取全部信息</span>List<span class="token generics function"><span class="token punctuation">&lt;</span>Country<span class="token punctuation">&gt;</span></span> countries <span class="token operator">=</span> countryMapper<span class="token punctuation">.</span><span class="token function">selectAll</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>Assert<span class="token punctuation">.</span><span class="token function">assertNotNull</span><span class="token punctuation">(</span>countries<span class="token punctuation">)</span><span class="token punctuation">;</span>Assert<span class="token punctuation">.</span><span class="token function">assertEquals</span><span class="token punctuation">(</span><span class="token number">183</span><span class="token punctuation">,</span> countries<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

该测试完整地址: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 群

三、最后问一句

你觉得 MyBatis 需要通用 Mapper 吗?

由于每个人对技术的掌握程度不同,对新事物的接受能力不同,因此我们都习惯于自己已经掌握的内容,抵制未知的能力,如果你不去试试,你能回答这个问题吗?

转载: https://blog.csdn.net/isea533/article/details/83045335

MyBatis 为什么需要通用 Mapper ? 1相关推荐

  1. mybatis单框架通用mapper使用(二)

    mybatis单框架通用mapper使用(二) 1 查询 1.1 简单查询 1.1.1 查多条 a 用法 接口引用.select(实体类对象引用); //里面实体类对象,里面不为null值的部分就会作 ...

  2. MyBatis 为什么需要通用 Mapper ?

    一.通用 Mapper 的用途 ? 我个人最早用 MyBatis 时,先是完全手写,然后用上了 MyBatis 代码生成器(简称为 MBG),在使用 MBG 过程中,发现一个很麻烦的问题,如果数据库字 ...

  3. mybatis sql linux,通用mapper生成sql及mybatis使用过程

    sql装配,自己实现一个,通用mapper和mybatis-generator是两个东西各自功能不同,结合使用而已 通用mapper: 1,省略单表操作的xml 2,不必写实现类(用通用mapper的 ...

  4. java用tkmapper分组查询_tk.mybatis 中的通用Mapper自定义SQL语句

    前言 今天就是想写点什么,其实还有很多没写的东西呢!笔记里边好多东西都挺好的,经验加实践总结出来的.就是都没有系统的整理,至于原因吧,有很多,最重要的一点就是我有点懒.今天写个最简单的东西,现在的开发 ...

  5. Springboot+Mybatis+通用Mapper多数据源实现数据同步

    有个需求需要查询远程数据库,然后将远程数据库中的数据抓取到本地,远程数据库中的数据是每天都增加的,所以就需要写个程序自动实现实时抓取. 这里我用到的框架是Springboot2.0+Mybatis+M ...

  6. 通用mapper——自定义搭配继承Mapper

    前提 通用Mapper--tk.mybatis(Example) 正文 由于tk.mybatis.mapper.common.Mapper中只有 BaseMapper<T>, Exampl ...

  7. mysql通用mapper_这就是——通用Mapper

    image.png 什么是通用mapper? 通用mapper 可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查. 可以按照自己的需要选择通用方法,还能很方便的开发自己的通用方法. 为什么 ...

  8. SpringBoot整合通用mapper实现泛型BaseController增删改

    SpringBoot整合通用mapper实现泛型BaseController增删改 前言:目前写项目做需求时增删改查一直用得比较频繁,但是在做开发的时候,却并不想一次一次写重复的代码,尝试着整合了一下 ...

  9. Mybatis之通用Mapper使用

    增加Maven依赖 <!-- mybatis 通用mapper --> <dependency><groupId>tk.mybatis</groupId> ...

最新文章

  1. IDEA中修改文件的默认创建方式
  2. 毕业设计:基于Springboot实现求职招聘,校园招聘系统
  3. 李飞飞点赞的NeurIPS新赛道,刚刚公布了第一批数据集benchmark入围名单
  4. redis的安装及springDataRedis
  5. Vue.js学习系列(二十八)-- 计算属性(二)
  6. JSTL-EL表达式
  7. 执行容器内的shell_你的Docker容器可能充满了Graboid加密蠕虫
  8. 电商促销活动那么多,美工需要炫酷海报万能模板!可套用!救急必备!
  9. 各个历史版本 cuda toolkit 下载链接
  10. 投入机器学习的怀抱?先学Python吧
  11. 蓝牙开发那些事儿(1)——从抓包数据开始
  12. G 蛋白偶联受体与小分子化合物的相互作用
  13. python绘制笛卡尔直角坐标系
  14. 记录几个免费质量高的图库视频库
  15. 认识计算机选题背景,与计算机专业相关的论文_计算机专业的毕业论文题目有哪些_大一我对计算机的认识3000字论文...
  16. 六年级计算机学情分析报告,六年级学生学情分析报告.doc
  17. PTA解封日期C语言
  18. NAO机器人——运动控制(3)
  19. Mathcad tips_3D绘图
  20. 数据结构:(c实现)单向链表,单链表的头增,尾增,头删,尾删,任意位置的删除与插入。

热门文章

  1. 灰色预测法 —— matlab
  2. 计算机二维动画的核心技术是什么意思,数字化技术在二维动画设计中的应用研究...
  3. 使用一个环境的或者半径异样消除器来进行异样消除
  4. matlab的fftn,matlab fftn
  5. wsl 重启_漫谈在Windows Server 2019中安装使用WSL
  6. python列表导出_python list格式数据excel导出方法
  7. linux通讯录软件带头像,小程序新技能 Get!保存微信好友头像到手机通讯录
  8. navicat 添加外键1215错误
  9. 解决 Plugin with id 'com.github.dcendents.android-maven' not found.
  10. 板邓:wordpress中add_action()和do_action()关系