MBG与Example

GitHub - mybatis/generator: A code generator for MyBatis.

我们在项目中使用Mybatis的时候,针对需要操作的一张表,需要创建实体类、Mapper映射器、Mapper接口,里面又有很多的字段和方法的配置,这部分的工作是非常频繁的。而大部分时候我们对于表的基本操作都是相同的,比如根据主键查询、根据Map查询、单条插入、批量插入、根据主键删除等等等等。当我们的表很多的时候,意味着有大量的重复工作。

所以有没有一种办法,可以根据我们的表,自动生成实体类、Mapper映射器、Mapper接口、里面包含了我们需要用到的这些基本方法和SQL呢。

Mybatis也提供了一个代码生成器,叫做Mybatis Generator,建成MBG,是mybatis的一个插件。我们只需要修改一个配置文件,使用相关的jar包命令或者java代码就可以帮助我们生成实体类、映射器和接口文件。

MBG的配置文件里面有一个Example的开关,这个东西用来构造复杂的筛选条件的,换句话说就是根据我们的代码去生成where条件。

原理:在实体类中包含了两个继承关系的Criteria,用其中自动生成的方法来构建查询条件。把这个包含了Criteria的实体类作为参数传到查询参数中,在解析Mapper映射器的时候会转换成SQL条件。

添加配置文件

我们添加如下的配置文件

        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration><!-- 数据库的驱动包路径 --><classPathEntry location="C:\Users\dpb\.m2\repository\mysql\mysql-        connectorjava\8.0.11\mysql-connector-java-8.0.11.jar" /><context id="DB2Tables" targetRuntime="MyBatis3"><!-- 去掉生成文件中的注释 --><commentGenerator><property name="suppressAllComments" value="true" /></commentGenerator><!-- 数据库链接URL、用户名、密码 --><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/mybatisdb?
characterEncoding=utf-8&amp;serverTimezone=UTC"userId="root"password="123456"><property name="nullCatalogMeansCurrent" value="true" /></jdbcConnection><!-- <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"connectionURL="jdbc:oracle:thin:@localhost:1521:XE"userId="car"password="car"></jdbcConnection> --><javaTypeResolver ><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- 生成模型的包名和位置 --><javaModelGenerator targetPackage="com.gupaoedu.vip.domain" targetProject="./src/main/java"><!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model,true:com.oop.eksp.user.model.[schemaName] --><property name="enableSubPackages" value="false" /><property name="trimStrings" value="true" /></javaModelGenerator><!-- 生成的映射文件包名和位置 --><sqlMapGenerator targetPackage="com.gupaoedu.vip.mapper" targetProject="./src/main/java"><property name="enableSubPackages" value="false" /></sqlMapGenerator><!-- 生成DAO的包名和位置 --><javaClientGenerator type="XMLMAPPER" targetPackage="com.gupaoedu.vip.mapper" targetProject="./src/main/java"><property name="enableSubPackages" value="false" /></javaClientGenerator><table tableName="t_user" domainObjectName="User" /></context>
</generatorConfiguration>

添加插件

我们需要在pom.xml中添加对应的插件

<build><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><!-- 指定配置文件的位置 --><configurationFile>src/main/resources/generatorConfig.xml</configurationFile></configuration></plugin></plugins>
</build>

生成

然后我们就可以利用插件帮助我们快速生成我们需要的表结构对应的相关文件

通用Mapper

问题:当我们的表字段发生变化的时候,我们需要修改实体类和Mapper文件定义的字段和方法。如 果是增量维护,那么一个个文件去修改。如果是全量替换,我们还要去对比用MBG生成的文件。字段变动一次就要修改一次,维护起来非常麻烦。

方式一

第一个,因为MyBatis的Mapper是支持继承的(见:https://github.com/mybatis/mybatis-3/issue s/35)。所以我们可以把我们的Mapper.xml和Mapper接口都分成两个文件。一个是MBG生成的,这部 分是固定不变的。然后创建DAO类继承生成的接口,变化的部分就在DAO里面维护。

public interface UserMapperExt extends UserMapper {public List<User> selectUserByName(String userName);
}

对应的映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.gupaoedu.vip.mapper.UserMapperExt" ><resultMap id="BaseResultMapExt" type="com.gupaoedu.vip.domain.User" ><id column="id" property="id" jdbcType="INTEGER" /><result column="user_name" property="userName" jdbcType="VARCHAR" /><result column="real_name" property="realName" jdbcType="VARCHAR" /><result column="password" property="password" jdbcType="VARCHAR" /><result column="age" property="age" jdbcType="INTEGER" /><result column="d_id" property="dId" jdbcType="INTEGER" /><result column="i_id" property="iId" jdbcType="INTEGER" /></resultMap><select id="selectUserByName" resultMap="BaseResultMapExt" >select * from t_user where user_name = #{userName}</select>
</mapper>

在全局配置文件中我们也需要扫描

<mappers><mapper resource="mapper/UserMapper.xml"/><mapper resource="mapper/UserMapperExt.xml"/>
</mappers>

所以以后只要修改Ext的文件就可以了。这么做有一个缺点,就是文件会增多。

方式二

既然针对每张表生成的基本方法都是一样的,也就是公共的方法部分代码都是一样的,我们能不能把 这部分合并成一个文件,让它支持泛型呢? 当然可以!

编写一个支持泛型的通用接口,比如叫GPBaseMapper,把实体类作为参数传入。这个接口里面定义 了大量的增删改查的基础方法,这些方法都是支持泛型的。 自定义的Mapper接口继承该通用接口,例如BlogMapper extends GPBaseMapper,自动获得对实 体类的操作方法。遇到没有的方法,我们依然可以在我们自己的Mapper里面编写。

我们能想到的解决方案,早就有人做了这个事了,这个东西就叫做通用Mapper。

https://github.com/abel533/Mapper/wiki

用途:主要解决单表的增删改查问题,并不适用于多表关联查询的场景。

除了配置文件变动的问题之外,通用Mapper还可以解决:

  1. 每个Mapper接口中大量的重复方法的定义;
  2. 屏蔽数据库的差异;
  3. 提供批量操作的方法;
  4. 实现分页。

使用方式:在Spring中使用时,引入jar包,替换applicationContext.xml中的sqlSessionFactory和configure。

<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.gupaoedu.crud.dao"/>
</bean>

Mybatis 代码生成器相关推荐

  1. MyBatis复习笔记5:MyBatis代码生成器

    前言:做过几个项目之后深感代码生成器的便捷,有了它我们可以少写许多重复的.基础的代码,如基本的增删改查的代码,我们可以交给代码生成器生成,而我们只需要专注于业务逻辑上的代码即可. MyBatis Ge ...

  2. MyBatis代码生成器-Example讲解

    概述 在上篇博文 MyBatis代码生成器(逆向工程)MBG使用 中介绍了MBGZ的基本使用.我们知道在MBG的context中将targetRuntime配置为MyBatis3时,MBG会生成和Ex ...

  3. 关于集成通用mapper的Mybatis代码生成器产生的model类注解

    主要是@Table.@Id.@GeneratedValue.@Column 4个注解 这四个注解都来自javax.persistence包,是Java持久层规范,单纯的Mybatis并不认识这四个注解 ...

  4. MyBatis代码生成器Easy Code

    MyBatis代码生成器Easy Code 传统的Jdbc代码量确实很多,包括连接的获取,释放连接,结果集封装. 使用JdbcTemplate帮助我们自动进行连接的获取释放,结果集封装,将任何sql语 ...

  5. 怎么运行Mybatis代码生成器MGB

    方式一:作为 Maven Plugin  mvn mybatis-generator:generate 使用场景: 对逆向工程定制较多,项目工程结构比较单一的情况 POM文件下需要以下插件 <b ...

  6. mybatis 代码生成器_spring Boot手把手教学(4): mybatis-plus 代码生成器,自动帮你生成代码

    1.前言 2.安装依赖 3.配置 4.生成器代码 5.代码展示 6.代码测试 6.1 添加工作 6.2 其余操作 1.前言 俗话说:工欲善其事,必先利其器. 我们在使用springBoot开发项目的, ...

  7. MyBatis代码生成器(逆向工程)MBG使用

    概述 我们前面的博文中了解了MyBatis的基本用法,也写了很多单表的CRUD方法,基本上每个表都需要用到这些方法,这些方法都很规范而且比较类似. 当数据库表的字段较少时,写起来还能接受,一旦字段过多 ...

  8. 【JEECG-Mybatis版本】springmvc+mybatis+代码生成器(代码一键生成)

              Jeecg-mybatis-framework 版本 简要说明 JEECG[J2EE Code Generation]是一款基于代码生成器的J2EE智能开发框架,借助该框架可以节省 ...

  9. MyBatis代码生成器Gradle插件分享

    这是一个MyBatis代码的代码生成器.阅读本文或使用本文代码可能需要一定的Gradle技术基础. 现在使用Gradle来管理的项目越来越多,这个使用Gradle操作的代码生成器插件写了很久了,最近整 ...

  10. Mybatis代码生成器Mybatis-Generator使用及配置详解

    Mybatis-Generator使用及配置 文章目录 Mybatis-Generator使用及配置 前言 一.MyBatis Generator是什么? 二.使用步骤 1.引入maven依赖 2.引 ...

最新文章

  1. CENTOS6.4 IBUS输入法不显示候选词解决办法
  2. 创建第一个vue实例
  3. iptables从入门到精通
  4. java生成0~9个9个不相等的整数
  5. GitHub:GitHub简介、使用方法、经验总结(图文教程)之详细攻略(持续更新!)
  6. Jupyter与PyCharm不可兼得?Jupytext就是你需要的!
  7. turtlebot3 模型没有显示_Turtlebot3新手教程:Open-Manipulator机械臂
  8. oracle把列数据串成一个字符串,一组数据,如何根据一个字段值分组后,把另一字段的字符串累加连接起来?...
  9. 895计算机专业基础,2017北京工业大学895计算机学科专业基础考研入学考试大纲...
  10. thinkphp3.2独立分组的建立
  11. win10无法安装迅雷精简版解决办法
  12. fds文件的处理方法
  13. 破解vs2010番茄插件
  14. 软考_2021年11月真题2__三点估算技术
  15. 平台消息推送是如何实现的
  16. 为什么到苹果官方售后更换电池,要求用户退出ID呢?
  17. 华为 matebook D 加装硬盘过程注意事项
  18. Linux关闭/禁用触摸屏,deepin关闭/禁用触摸屏方法
  19. ABBYY FineReader 14之如何选择正确的OCR选项
  20. riopoly matlab,rio极简数据导入教程

热门文章

  1. 最新视频打赏系统全开源版本源码+附教程
  2. mt6735通用recovery_Mtk arm64通用root ,使用无需bl或者rec,安卓7以下使用最佳!
  3. springcloud加载j2cache时读取apollo配置中心配置
  4. 【Keras+计算机视觉+Tensorflow】生成对抗神经网络中DCGAN、CycleGAN网络的讲解(图文解释 超详细)
  5. vscode中调试get/post请求的小工具
  6. Simulink电机控制代码生成-----关于PI控制器参数整定的一点总结
  7. 在服务器上进行深度学习的入门教程
  8. 您是否在找这样的软件:
  9. 拉普拉斯Laplace算子和高斯二阶导核(LOG算子)和SIFT算法
  10. 关联性——典型相关分析