MyBatis 为什么需要通用 Mapper ?

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

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

一、通用 Mapper 的用途 ?

我个人最早用 MyBatis 时,先是完全手写,然后用上了 MyBatis 代码生成器(简称为 MBG),在使用 MBG 过程中,发现一个很麻烦的问题,如果数据库字段变化很频繁,就需要反复重新生成代码,并且由于 MBG 覆盖生成代码和追加方式生成 XML,导致每次重新生成都需要大量的比对修改。除了这个问题外,还有一个问题,仅仅基础的增删改查等方法,就已经产生了大量的 XML 内容,还没有添加一个自己手写的方法,代码可能就已经几百行了,内容多,看着比较碍事。

因为很多人都在使用 MBG,MBG 中定义了很多常用的单表方法,为了解决前面提到的问题,也为了兼容 MBG 的方法避免项目重构太多,在 MBG 的基础上结合了部分 JPA 注解产生了通用 Mapper。通用 Mapper 可以很简单的让你获取基础的单表方法,也很方便扩展通用方法。使用通用 Mapper 可以极大的提高你的工作效率。

通过下面的快速入门,会让你尽快的了解基本的用法。

二、快速入门

为了让你更快速的了解通用 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 不存在的方法,在这里都有,而且如果你想实现自己的通用方法,可以很轻松的进行扩展。

三、最后问一句

你觉得 MyBatis 需要通用 Mapper 吗?

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217758.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午8:50
下一篇 2026年3月18日 上午8:50


相关推荐

  • css里的clear_css display属性的值及用法

    css里的clear_css display属性的值及用法clear:none|left|right|both.对于CSS的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。清除浮动方法,1,给父级元素添加class=“clearflex”2,在css中给父级添加属性:overflow:hidden;(我比较喜欢这个)3,伪元素清除法,4,建立空的div,命名为clear,在css中添加clear:both;…

    2025年10月27日
    8
  • noip2014普及组复赛题解_关于如何提高产能的报告

    noip2014普及组复赛题解_关于如何提高产能的报告NOIP2012提高组复赛解题报告

    2022年8月22日
    7
  • pytest报错_eclipse提交代码到git

    pytest报错_eclipse提交代码到git前言我们每天写完自动化用例后都会提交到git仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交git仓库的用例。pytest-picked插件可以

    2022年7月29日
    8
  • javaweb权限管理简单实现_javaweb管理系统项目

    javaweb权限管理简单实现_javaweb管理系统项目推荐最新技术springboot版权限管理(java后台通用权限管理系统(springboot)),采用最新技术架构,功能强大!注:由于该项目比较老,所以没有采用maven管理,建议下载springboot权限管理系统,对学习和使用会更有帮助。springboot权限管理系统介绍地址:https://blog.csdn.net/zwx19921215/article/details/978……………

    2025年8月10日
    3
  • RegisterHotKey 热键的使用

    RegisterHotKey 热键的使用简介 简单的说就是全局快捷键 你的程序启动后注册热键到指定窗口 以后如果用户按下你注册的热键 你的指定窗口就会收到 WM HOTKEY 消息通知 进而进行处理 使用起来只有三个步骤 1 注册热键 2 在 WM HOTKEY 通知中进行逻辑处理 3 解除注册热键 API 介绍 具体消息参数含义 详细介绍等可以去 msdn 官网查看 https msdn microsoft com en

    2026年3月19日
    2
  • Java的泛型

    Java的泛型使用Java的小伙伴,对于Java的一些高级特性一定再熟悉不过了,例如集合、反射、泛型、注解等等,这些可以说我们在平时开发中是经常使用到的,尤其是集合,基本是只要写代码没有用不到的,今天我…

    2022年7月7日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号