Mybatis详解系列(五)–Mybatis Generator和全注解风格的MyBatis3DynamicSql

简介

Mybatis Generator (MBG) 是 Mybatis 官方提供的代码生成器,通过它可以在项目中自动生成简单的 CRUD 方法,甚至“无所不能”的高级条件查询(MyBatis3DynamicSql,有了它根本不需要 Mybatis Plus),让我们避免了进行数据库交互时需要手动创建对象和配置 Mybatis 映射等基础工作。

另外,MBG 有很好地扩展性,它提供了大量的接口和插件用来给我们自定义生成的代码应该是什么样子,例如我们可以自定义注释、代码格式化、添加 toString 方法等。本文将讲解如何使用这些接口。

本文内容大致如下,由于篇幅较长,可选择阅读:

  1. 如何使用 MBG 生成代码;
  2. 详解 MBG 的配置,将配置使用自定义注释生成器、实体类中添加 toString/equals/hashCode方法等。
  3. MyBatis3DynamicSql 风格(无 XML) API 的使用。

通过本文的学习,你将能够通过简单改造 MBG 来生成自己想要的代码,另外,我们也将认识强大的 MyBatis3DynamicSql 风格(它提供的条件类使用 Lambda 解耦,全注解,支持单表查询、多表查询、分页、排序、分组等等)。

关于 MBG 生成代码的风格

MBG 支持生成不同风格、不同语言的代码,例如,MBG 能够生成 Java 或 Kotlin 代码。另外,MBG 支持生成旧版的 MyBatis3 风格(我们常用的 xml 配置属于 MyBatis3 风格,官方认为这种风格已经过时),也支持新版的 MyBatis3DynamicSql 的风格(MyBatis3DynamicSql 风格为官方推荐)。几种风格的对比如下:

代码风格 描述
MyBatis3DynamicSql 默认风格,官方推荐
Java代码
全注解,不生成 XML 文件生成的高级条件查询灵活性较大,使用 lambda 表达式避免条件对象渗透到上一层
一个表生成一个实体类
MyBatis3Kotlin Kotlin 代码,本文不涉及
MyBatis3 早期风格
Java代码能够生成 MyBatis3 兼容的 xml 或 全注解生成的高级条件查询灵活性较小,条件类渗透到上一层,而且 sql 和代码耦合度较高
一个表除了生成基本类,可能还会生成主键类和BLOB类(如果指定的话)
MyBatis3Simple MyBatis3 的简易版
Java代码能够生成 MyBatis3 兼容的 xml 或 全注解不生成 “by example” 或 “selective” 的方法
一个表生成一个实体类

由于 MyBatis3 风格生成的 Example 类存在的问题,实际项目中建议使用 MyBatis3Simple 风格或官方推荐的 MyBatis3DynamicSql 风格

关于 MBG 文件覆盖的问题

当我们在迭代开发环境中使用 MBG,需要注意文件覆盖的问题,默认情况下,文件覆盖规则如下:

  1. 如果 XML 已经存在,MBG 会采用文件合并的方式。

    它不会修改你自定义的节点,但是会更新原来生成的 CRUD 节点(如果表发生变化)。文件合并有个前提,就是原来生成的 CRUD 节点必须包含 @mbg.generated 的默认注释。否则,当再次运行 MBG 时,它将无法识别哪些是它生成过的节点,于是会出现下图的情况,即 CRUD 节点被重复插入。

![https://img2020.cnblogs.com/blog/1731892/202005/1731892-20200502235440091-1666766703.png)

  1. 如果 Java 或 Kotlin 文件已经存在,MBG 可以覆盖现有文件或使用其他唯一名称保存新生成的文件,这取决于你如何配置<overwrite>false</overwrite>

那么,下面开始详细介绍如何使用 MBG。

项目环境的说明

工程环境

JDK:1.8.0_231(要求 JDK8 及以上)

maven:3.6.1

IDE:Spring Tool Suites4 for Eclipse 4.12

mysql:5.7.28

数据库脚本

具体的 sql 脚本也提供好了(脚本路径)。

maven配置

pom.xml配置

MBG 支持使用Java 代码、maven 插件、Eclipse 插件等方式运行,本文使用 maven 插件方式,所以需要在 build/plugins 节点引入 MBG 插件,并加入其它依赖项,例如 mybatis、mysql 驱动等。另外,因为本文也需要用到 Java 程序来运行 MBG(当使用自定义类时),所以把插件的依赖项从 build/plugins/plugin 节点中单独取出来。

    <dependencies>
        <!-- mybatis-generator -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>
        <!-- dynamic-sql 用于测试MyBatis3DynamicSql生成的代码-->
        <dependency>
            <groupId>org.mybatis.dynamic-sql</groupId>
            <artifactId>mybatis-dynamic-sql</artifactId>
            <version>1.1.4</version>
        </dependency>
        <!-- jdbc驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
        </dependency>
        <!-- logback -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <type>jar</type>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.0</version>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <verbose>true</verbose>
                    <contexts>default</contexts>
                    <overwrite>false</overwrite>
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <includeCompileDependencies>true</includeCompileDependencies>
                </configuration>
            </plugin>
        </plugins>
    </build>

插件参数详解

plugin/configuration 节点可以配置影响 MBG 行为的参数,如下:

参数 表达式 类型 描述
configurationFile ${mybatis.generator.configurationFile} java.io.File 配置文件路径。
默认为${basedir}/src/main/resources/generatorConfig.xml
contexts ${mybatis.generator.contexts} java.lang.String 指定使用配置文件中的哪个context
多个用逗号隔开
jdbcDriver ${mybatis.generator.jdbcDriver} java.lang.String JDBC 驱动
jdbcPassword ${mybatis.generator.jdbcPassword} java.lang.String JDBC 密码
jdbcURL ${mybatis.generator.jdbcURL} java.lang.String JDBC URL
jdbcUserId ${mybatis.generator.jdbcUserId} java.lang.String JDBC 用户名
outp
  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒年拾荒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值