MBG-基本用法

MBG 的基本结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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">

<genratorConfiguration>
<!-- 以下 3 个子标签要严格按照顺序进行配置 -->

<properties/>(引入数据库属性文件)

<classPathEntry/>(可选,引入数据驱动,推荐在pom.xml中配置)

<context/>(指定要生成对象的数据库)
</genratorConfiguration>

context

context 只有一个必选属性 id,用来唯一确定该标签,同时 context 还有如下可选属性:

  • defaultModelType:定义 MBG 如何生成实体类,有如下可选值
    • conditional:默认值,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,而是会将该字段合并到基本实体类中。
    • flat:该模型只会为每张表生成一个实体类,这个实体类包含表中的所有字段。这个模型最简单,推荐使用
    • hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有 BLOB 字段,则会为表生成包含所有 BLOB 字段的单独的实体类,然后为所有其他的字段另外生成一个单独的实体类。MBG 会在所有生成的实体类之间维护一个继承关系。
  • targetRuntime:此属性用于指定生成的代码的运行时环境,支持以下可选值:
    • MyBatis3:默认值。
    • MyBatis3Simple:这种情况不会生成于 Example 相关的方法。
  • introspectedColumnImpl:该参数可以指定扩展 org.mybatis.generator.api.Introspected Column 类的实现类。

一般对 context 进行如下配置即可:

1
<context id="" defaultModelType="flat" targetRuntime="MyBatis3Simple">

context 的子标签(严格按子标签顺序进行配置)

1. property(0 个或多个)

property 标签包含了 3 个和分隔符相关的属性:

  • autoDelimiKeywords:<property name="autoDelimiterKeywords"value="true"/>
  • beginningDelimiter:<property name="beginningDelimiter"value="`"/>
  • endingDelimiter:<property name="endingDelimiter"value="`"/>

在 MySQL 中使用反单引号 ` 作为分隔符;

在 SQLServer 中使用 []

通过分隔符可以将部分内容作为一个整体的字符串进行处理。

property 还有以下 3 个属性:

  • javaFileEncoding:设置要使用的 Java 文件的编码。
  • javaFormatter
  • xmlFormatter

2. plugin(0 个或多个)

plugin 标签用来定义一个插件,用于扩展或修改通过 MBG 生成的代码。该插件将按照在配置中声明的顺序执行。

3. commentGenerator(0 个或 1 个)

该标签用来配置如何生成注释信息,有一个可选属性 type 可以指定注释生成器的实现类,该实现类需要实现 org.mybatis.generator.api.CommentGenerator 接口,而且必须有一个默认空的构造器。

type 属性接收默认的特殊值 DEFAULT,使用默认的实现类 org.mybatis.generator.internal.DefaultCommentGenerator。

默认的实现类中提供了三个可选属性:

  • suppressAllComments:阻止生成注释,默认为 false。
  • suppressDate:阻止生成的注释包含时间戳,默认为 false。
  • addRemarkComments:注释是否添加数据库表的备注信息,默认为 false。

一般情况下都会选择屏蔽注释信息,所以 commentGenerator 标签可以如下配置:

1
2
3
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>

4. jdbcConnection(1 个)

javaConnection 标签用于指定 MBG 要连接的数据库信息,必选,并且只能有一个。

该标签有两个必选属性:

  • driverClass:访问数据库的 JDBC 驱动的完全限定类名。
  • connectionURL:访问数据库的 JDBC 连接 URL。

该标签还有两个可选属性:

  • userId:访问数据库的用户 ID。
  • password:访问数据库的密码。

该标签还可以接收多个 property 子标签,其属性值都会添加到 JDBC 驱动的属性中。

5. javaTypeResolver(0 个或 1 个)

该标签用来指定 JDBC 类型和 Java 类型如何转换。

6. javaModelGenerator(1 个)

用于控制生成的实体类,有两个必选属性:

  • targetProject:指定目标项目的路径,可以使用相对路径或绝对路径。
  • targetPackage:指定生成实体类存放的包名。

该标签还支持以下几个 property 子标签属性:

  • constructorBased:该属性只对 MyBatis3 有效,如果为 true 就使用构造方法入参;为 false 就使用 setter 方式,默认。
  • enableSubPackage:为 true ,MBG 会根据 catalog 和 schema 来生成子包;为 false,直接使用 targetPackage 属性,默认 false。
  • immutable:用来配置实体类属性是否可变。
  • rootClass:设置所有实体类的基类。
  • trimStrings:判断是否对数据库查询结果进行 trim 操作,默认为 false。

7. sqlMapGenerator(0 个或 1 个)

该标签用于配置 Mapper.xml 的属性,该标签可选。如果 targetRuntime 设置为 MyBatis3,则只有当 javaClientGenerator 配置需要 XML 时,该标签才必须配置一个,如果没有配置 javaClientGenerator,则使用如下规则:

  • 如果指定了一个 sqlMapGenerator,那么 MBG 将只生成 XML 的 mapper.xml 映射文件和实体类。
  • 如果没有指定 sqlMapGenerator,那么 MBG 将只生成实体类。

该标签只有两个必选属性:

  • targetProject:指定目标项目的路径。

  • targetPackage:生成映射文件(mapper.xml)的存放包。

8. javaClientGenerator(0 个或 1 个)

该标签用于配置 Mapper 接口的属性,该标签可选。

该标签有 3 个必选属性:

  • type:用于指定 Mapper 接口生成器,该属性提供了预设的生成器,首先根据 context 的 targetRuntime 分成两类:
    • MyBatis3
      • ANNOTATEDMAPPER:基于注解的 Mapper 接口,不会有对应的 XML 映射文件。
      • MIXEDMAPPER:XML 和 注解的混合形式。
      • XMLMAPPER:所有的方法都在 XML 中,接口调用以来 XML 文件。
    • MyBatis3Simple
      • ANNOTATEDMAPPER:基于注解的 Mapper 接口,不会有对应的 XML 映射文件。
      • XMLMAPPER:所有的方法都在 XML 中,接口调用依赖 XML 文件。推荐使用
  • targetProject:指定目标项目的路径。
  • targetPackage:指定生成 Mapper 接口的存放包。

9. table(1 个或多个)

table 是最重要的一个标签,只有在 table 中配置过的数据库的表,才能经过上述其他标签的配置生成最终的代码。

table 标签有一个必选属性 tableName,该属性指定要生成的表,可以通过通配符匹配多个表,如果要生成全部的表:<table tableName="%"/>

一般情况下可以直接指定:<table tableName="要生成的表名"/>

table 标签有多个可选属性:

  • schema:数据库的 schema,可以使用 SQL 通配符配置。如果设置了该值,生成 SQL 的表名会变成 schema.tableName 的形式。对于 MySQL 来说,schema 等价于 database。
  • catalog:跟 schema 作用相同。
  • alias:如果指定,这个值会用在生成的 select 查询 SQL 表的别名和列名上,例如 alias_actualColumn(别名__实际列名)。
  • domainObjectName:生成对象的基本名称。如果没有指定,MBG 会自动根据表名来生成名称。
  • enableXXX:XXX 代表多种 SQL 方法,该属性用来指定是否生成对应的 XXX 语句。
  • selectByPrimaryKeyQueryId:
  • selectByExampleQueryId:
  • modelType:和 context 的defaultModelType 含义一样,这里可以针对表进行配置,配置会覆盖 context 的 defaultModelType 配置。
  • escapeWildcards:表示查询列是否对 schema 和表名中的 SQL 通配符( _ 和 % )进行转义。
  • delimitIdentifiers:是否给标识符增加分隔符。默认为 false。
  • delimitAllColumns:是否对所有列增加分隔符。默认为 false。

(待补充)