神器-通用Mapper
一、简介
通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。
极其方便的使用MyBatis单表的增删改查。
支持单表操作,不支持通用的多表联合查询。
通用 Mapper 支持 Mybatis-3.2.4 及以上版本。
注:项目地址
二、原生Mybatis的痛点
1.mapper.xml文件里有大量的sql,当数据库表字段变动,配置文件就要修改
2.需要自己实现sql分页,select * from table where . . . limit 1,3
自己手写分页,除了传参page、pageSize,还需要返回条目总数count。
3.数据库可移植性差:如果项目更换数据库,比如oracle-->mysql,mapper.xml中的sql要重新写,因为Oracle的PLSQL 和mysql 支持的函数是不同的。
4.生成的代码量过大。
5.批量操作,批量插入,批量更新,需要自写。
我个人最早用 MyBatis 时,先是完全手写,然后用上了 MyBatis 代码生成器(简称为 MBG),在使用 MBG 过程中,发现一个很麻烦的问题,如果数据库字段变化很频繁,就需要反复重新生成代码,并且由于 MBG 覆盖生成代码和追加方式生成 XML,导致每次重新生成都需要大量的比对修改。除了这个问题外,还有一个问题,仅仅基础的增删改查等方法,就已经产生了大量的 XML 内容,还没有添加一个自己手写的方法,代码可能就已经几百行了,内容多,看着比较碍事。
因为很多人都在使用 MBG,MBG 中定义了很多常用的单表方法,为了解决前面提到的问题,也为了兼容 MBG 的方法避免项目重构太多,在 MBG 的基础上结合了部分 JPA 注解产生了通用 Mapper。通用 Mapper 可以很简单的让你获取基础的单表方法,也很方便扩展通用方法。使用通用 Mapper 可以极大地提高你的工作效率。
三、使用前的疑问
(1)这个东西使用后,会不会降低我们的代码执行效率呢?
答:其实他的原理就是利用反射机制拼出的 XML形式的动态SQL然后去执行,所以你说代码时间消耗肯定也会有一些,但是这是很小很小的,再者在现在项目中,对于提供给前端的接口,通常都会利用些组件进行访问加速(毕竟直接从数据中检索不如在内存中来的快些),比如:redis、memcache、elastic search、solr等,所以执行效率问题是可以避免或忽略的。
(2)如果有些方法不想使用,例如:用户的接口服务不能使用删除方法也不想暴漏出来,该怎么办呢?
答:我们通常会定义增、删、改、查四个基础Mapper接口,你可以按需要引入进行使用,其实即使你使用了公共的CrudMapper(代表增删改查都在一起的类)也没有问题,只要你在你的service层不要放出删除方法也是可以的。
四、快速入门
-
添加通用Mapper依赖
通用Mapper默认引用了jdbc与mybatis启动器,并开启驼峰,可去除重复依赖
-
实体类配置
通过 MBG 配合 专用代码生成器可以直接生成实体类等基础代码,为了避免信息量过大,这里当作手工编写和配置。
经过上面简单的配置后,相当于就有了 MyBatis 中的关系映射了,特别注意,这个映射关系只对通用 Mapper 有效,自己手写方法时,需要自己处理映射关系。 -
创建Mapper接口
这里继承了 tk.mybatis.mapper.common.Mapper接口,在接口上指定了泛型类型 Dept。当你继承了Mapper接口后,此时就已经有了针对Dept的大量方法,方法如下:
-
配置通用 Mapper
springboot为例开启注解即可,Spring整合在xml自行添加<bean>配置
-
使用
编写service调用接口即可