MyBatis Generator 详解
MyBatis Generator 简称 MBG,
MBG 是一个专门为 MyBatis 框架使用者定制的代码生成器,
可以快速的根据数据库表生成对应的映射文件,接口,以及实体类。
支持基本的增删改查,以及 QBC 风格的条件查询。
但是数据库表连接、存储过程等复杂 SQL 需要自己编写。

XML 配置文件

文件头

使用最新版的 MBG 需要使用上面的xml头,配置文件必须包含下面的doctype ( 文件类型 )
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE generatorConfiguration
PUBLIC “-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN”
http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

根节点

< generatorConfiguration > ,根节点没有任何属性
包含以下子元素,有严格的配置顺序

  1. < properties > (0个 或 1个)
  2. < classPathEntry > (0个 或 多个)
  3. < context > (1个 或 多个)

    < properties >

  • 这个元素用于:指定一个需要在配置文件中(即generatorConfiguration.xml)解析使用的外部属性文件
  • 引入属性文件后,可以在配置中使用 ${property}这种形式的引用,通过这种方式引用属性文件中的属性值
  • 通过resource或者url来指定属性文件的位置,这两个属性只能二选一,不能同时用

    < classPathEntry >

  • 最常见的用法是通过这个属性指定驱动的路径

  • classPathEntry 只在下面这两种情况下才有效:因此,如果你需要加载其他用途的jar包,classPathEntry 起不到作用,不能这么写

    • 当加载 JDBC 驱动内省数据库时
    • 当加载根类中的 JavaModelGenerator 检查重写的方法时

      < context >

  • 这个元素用于:指定生成一组对象的环境

  • 该元素只有一个必选属性 id,用来唯一确定一个 < context > 元素。还有几个可选属性
    • defaultModelType:这个属性定义了 MBG 如何生成实体类 ,有以下可选值
      • conditional:这是默认值,这个模型和下面的hierarchical类似。但是,如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中
      • flat:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。这种模型最简单,推荐使用
      • hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类。如果表还有 BLOB 字段,则会为表生成一个包含所有 BLOB 字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系
    • targetRuntime:此属性用于指定生成的代码的运行时环境。该属性有以下可选值:
      • MyBatis3DynamicSql:这是默认值
      • MyBatis3Kotlin:
      • MyBatis3:
      • MyBatis3Simple:
    • introspectedColumnImpl:该参数可以指定扩展org.mybatis.generator.api.IntrospectedColumn该类的实现类
  • 包含以下子元素,有严格的配置顺序
  1. < property > (0个或多个)
  2. < plugin > (0个或多个):用来定义一个插件,用于扩展 或 修改 MBG 代码生成器生成的代码
  3. < commentGenerator > (0个或1个):注释生成器
  4. < connectionFactory >
  5. < jdbcConnection > (1个):用于指定数据库连接信息
  6. < javaTypeResolver > (0个或1个):用于指定 JDBC 类型和 Java 类型如何转换
  7. < javaModelGenerator > (1个):
  8. < sqlMapGenerator > (0个或1个):
  9. < javaClientGenerator > (0个或1个):
  10. < table > (1个或多个):
    1. < generatedKey > (0个或1个)
    2. < columnRenamingRule > (0个或1个)
    3. < columnOverride > ( 0个或多个)
    4. < ignoreColumn > (0个或多个)

1.
name的可选值:autoDelimitKeywords、beginningDelimiter、endingDelimiter、javaFileEncoding、javaFormatter、xmlFormatter

autoDelimitKeywords:当表名或者字段名为SQL关键字的时候,可以设置该属性为 true,MBG 会自动给表名或字段名添加()分隔符<br />beginningDelimiter 和 endingDelimiter:的默认值为双引号("),在Mysql中不能这么写,所以还要将这两个默认值改为反单引号()
javaFileEncoding:设置要使用的 Java 文件的编码,默认使用当前平台的编码
javaFormatter 和 xmlFormatter:如果你想使用模板来定制生成的 java 文件和 xml 文件的样式,你可以通过指定这两个属性的值来实现

MyBatis Generator 的使用

generatorConfig.xml 必须放在 resources 目录下
图片.png

生成需要用到的 Maven 插件

  1. <plugin>
  2. <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-maven-plugin</artifactId>
  4. <version>1.4.0</version>
  5. <dependencies>
  6. <!-- Java 连接 MySQL 的驱动程序 -->
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. <version>${mysql-connector-java.version}</version>
  11. </dependency>
  12. </dependencies>
  13. </plugin>

MyBatis3 简洁配置

<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="simple" targetRuntime="MyBatis3Simple">

        <commentGenerator>
            <!-- 是否去除自动生成的注释 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--数据库连接的信息 -->
        <jdbcConnection
                driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3307/community?serverTimezone=Hongkong"
                userId="root" password="root">
        </jdbcConnection>

        <!-- 实体类生成的位置 -->
        <javaModelGenerator targetPackage="example.model" targetProject="src/main/java"/>

        <!-- XxxMapper.xml 映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="example.mapper" targetProject="src/main/java">
        </sqlMapGenerator>

        <!-- Mapper.java 接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="example.mapper" targetProject="src/main/java"/>

        <!-- 数据库表名字和我们的 entity 类对应的映射指定 -->
        <table tableName="t_user" domainObjectName="User">
            <generatedKey column="id" sqlStatement="Mysql"/>
        </table>
    </context>
</generatorConfiguration>