generatorConfig.xml文件中标签配置详解

时间:2024-03-06 21:17:52

一、首选需要添加文件头:

<?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>

    </properties>
    
    <!--    子级标签1-->
    <classPathEntry location=""/>
    
    <!--    子级标签1-->
    <context id="">
        <
        <javaModelGenerator targetPackage="" targetProject=""></javaModelGenerator>
        <table tableName=""></table>
    </context>

</generatorConfiguration>

三、子级标签详解

1. properties标签 : 用来指定外部的属性元素,最多可以配置 个,也可以不配置。引入属性文件后,可以在配置中使用${property}这种形式的引用,通过这种方式引用属性文件中的属性值,对于后面需要配置的 JDB 信息会很有用。

(1)此标签具备两个属性,分别是url和resource,二者只能用其一,而且用法各有不同。

  resource 指定 classpath 下的属性文件,类似 com/mypro ect/generatorConfig.properties 这样的属性值。
  url 指定文件系统上的特定位置,例如file://C /myfolder/generatorConfig.properties。
2. classPathEntry 标签:这个标签可以配置多个,也可以不配置。classPathEntry 标签最常见的用法是通过属性 location 指定驱动的路径,如下:
<classPathEntry location=” E: \mysql\mysql-connector java-5.1.29.jar” />

3. context标签:该标签至少配置一 个,可以配置多个。其主要用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行的时候还可以指定要运行的 context。

(1)标签属性如下:

  · id:此属性必填,用于唯一确定该标签。

  · defaultModelType:定义MBG如何生成实体类,该属性有以下可选值:

    · conditional:默认值,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,而是会将该字段合并到基本实体类中。

    · flat:该模型只为每张表生成一个实体类,这个实体类包含表中的所有字段,这种模型最简单,推荐使用。

    · hierarchical :如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有 BLOB 字段,则会为表生成 一个包含所有 BLOB 字段的单独的实体类,然后为所有其他的               字段另外生成一个单独的实体类。 MBG 会在所有生成的实体类之间维护一个继承关系。

  · targetRuntime:此属性用于指定生成的代码的运行时环境,支持以下可选值:
    · MyBatis3:默认值。
    · MyBatis3Simple :这种情况不会生成与 Example 相关的方法

  · introspectedColumnimpl :该参数可以指定扩展 org mybatis. generator.api.Introspected Column 类的实现类。

  一般写法如下:

<context id=”Mysql ” defaultModelType=”flat >

(2)context标签下包含众多子标签,各子标签都有严格的顺序,如下所示:

  · property标签:此标签包含和三个分隔符有关的属性,分别如下:(有时候表名是“sys user”,如果sql语句是 select * from user info,会出现报错,这时就需要反向单引号解决此问题)

    · autoDelimitKeywords:自动给关键字添加分隔符的属性。
    · beginningDelimiter:配置前置分隔符的属性。
    · endingDelimiter:配置后置分隔符的属性。
    写法如下:
<property name = "autoDelimitKeywords" value="true"/>
<property name = "beginningDelimiter"  value = "~"/>
<property name = "endingDelimiter"  value = "~"/>

  · 此标签还具有和Java 文件有关的属性,分别如下:

    · javaFileEncoding:设置要使用的 Java 文件的编码,例如 GBK或UTF_8 。默认使用当前运行环境的编码。后面两个 Formatter 相关的属性并不常用 这里不做详细介绍。

    · javaFormatter

    · xmlFormatter

  · plugin 标签:可以配置一个或者多个,个数不受限制。该标签用来定义一个插件,用于扩展或修改通过 MBG 生成的代码 。该插件将按在配置中配置的顺序执行。

  · commentGenerator标签: 用来配置如何生成注释信息,最多可以配置一个。有一个可选属性:

    · type:可以指定用户的实现类,该类需要实现 org.mybatis.generator api.CommentGenerator 接口,而且必有一个默认空的构造方法。 type 属性接收默认的特殊值 DEFAULT ,使用默认的实现类 org .mybati s.generator internal.DefaultCommentGenerator。默认的实现类中提供了3个可选属性,需要通过 property 属性进行配置。

      · suppressAllComments :阻止生成注释 ,默认为 false
      · suppressDate 阻止生成的注释包含时间戳,默认为 false
      · addRemarkComments :注释是否添加数据库表的备注信息 ,默认为 false
    一般情况下,由于 MBG 生成的注释信息没有任何价值 ,而且有时间戳的情况下每次生成的注释都不 一样,使用版本控制的时候每次都会提交,因而 般情况下都会屏蔽注释信息,可以如下配置。
<commentGenerator> 
<property name=” suppressDate ” value=” true ” />
<property name=” addRemarkComments” value=” true ” />
</commentGenerator>

    在数据库表宇段包含备注信息的情况下生成的 Java 对象代码的注释如下。

/** 
* Database Column Remarks : 
* 角色名
* 
* This field was generated by MyBat Generator. 
This field corresponds to the database column sys role.role name 
* @mbggenerated 
*/ 
private String roleName ;

    如果对上面的注释不满意或者想实现自己的注释形式,可以实现 CommentGenerator,参考 MBG 中的 DefaultCommentGenerator 即可。这里提供 个简单例子供参考,假设实

现类为 tk.mybatis generator MyCommentGenerator ,具体不详细介绍。
  · jdbcConnection标签: 指定 MBG 要连接的数据库信息,该标签必选,并且只能有一个配置该标签需要注意,如果 JDBC 驱动不在 classpath 下,就要通过 classPathEntry标签引入 jar 包,这里推荐将 jar 放到 classpath 下,或者参考前面 classPathEntry 配置 JDBC驱动的方法。
    两个必选属性:
    · driverClass:访问数据库的 JDBC 驱动程序的完全限定类名
    · connectionURL: 访问数据库的 JDBC 连接 URL
    两个可选属性:
    · user!d :访问数据库的用户 ID
    · password :访问数据库的密码
    该标签还可以接受多个 property 子标签 ,这里配置的 property 属性都会添加到JDBC 驱动的属性中(使用 proprety 标签的 name 属性反射赋值)
  写法如下:
 <jdbcConnection driverClass="com.mysql.jdbc .Driver"
        connectionURL="jdbc:mysql://localhost:3306/mybatis"
        userId="root" password=" ">
 </jdbcConnection>

   · javaTypeResolver标签:用来指定 JDBC 类型和 Java 类型如何转换,最多可以配置一个。一般默认,不随便改

   · javaModelGeneratoor标签:该标签用来控制生成的 体类,根据 context 标签中配置的 defaultModelType 属性值的不同,一 表可能会对应生成 个不同的实体类。一个表对应多个类时使用并不方便,所以前面推荐使 flat ,保证 一个表对应一个实体类。该标签必须配置一个,并且最多配置一个。

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

    · targetPackage :生成实体类存放的包名。一般就是放在该包下,实际还会受到其他配置的影响
    · targetProject :指定目标项目路径,可以使用相对路径或绝对路径
    该标签还支持以下几个 property 子标签属性。
    · constructorBased :该属性只对 MyBatis3 有效,如果为 true 就会使用构造方法,如果为 false 就会使用 setter 方式。默认为 false
    · enableSubPackages :如果为 true, MBG 会根据 catalog schema 来生成子包。如果为 false 就会直接使用 target Package 属性。默认为 false
    · immutable :用来配置实体类属性是否可变 如果设置为 true ,那么 constructorBased不管设置成什么,都会使用构造方法入参,并且不会生成 setter 方法 如果为 false,实体类属性就可 以改变。默认为 false    · rootClass 设置所有实体类的基类 果设置,则需要使用类的全限定名称。井且,如果 MBG 能够加载 rootClass (可 以通过 classPathEntry 引入 jar 包,或者classpat 方式),那么 MBG 不会覆盖和父类中完全匹配的属性。匹配规则如下:
      · 属性名完全相同
      · 属性类型相同
      · 属性有 getter 方法
      · 属性有 setter 方法
    · trimStrings :判断是否对数据库查询结果进行 trim 操作 默认值为 false 如果设置为 true 就会生成如下代码。
public void setUsername(String username) {
        this.username = username ==null ? null : username , trim();
    }
    javaModelGenerator 配置 例如下:
<javaModelGenerator targetPackage="test.model"
        targetProject="src\main\java">
            <property name = "enableSubPackages" value = "false"/>
            <property name = "trimStrings" value = "false"/>
 </javaModelGenerator>

  · sqlMapGenerator标签:该标签用于配置 SQL 映射生成器 Mapper xml 文件)的属性,该标签可选,最多配置一个。如果 targetRuntime 设置为 MyBatis3 ,则只有当 avaClientGenerator 配置需要 XML时,该标签才必须配置 如果没有配置 avaClientGenerator ,则使用以下规则如果指定了一个 sqlMapGenerato ,那 MBG 将只生成 XML的 SQL 射文件和实体类。如果没有指定 sqlMapGenerator ,那么 MBG 将只生成实体类。

    该标签只有两个必选属性

      · targetPackage 生成 SQL 映射文件( XML 文件)存放的包名 。一般就是放在该包下,实际还会受到其他配置的影响。
      · targetProject 指定目标项目路径,可以使用相对路径或绝对路径。
    示例如下:
<sqlMapGenerator targetPackage="test.xml"
        targetProject= "E: \MyProject\src \ma in\resources" > 
            <property name="enableSubPackages" value="false"/>
</sqlMapGenerator>

  · javaClientGenerator标签:该标签用于配置 Java 客户端生成器( Mapper 接口)的属性,该标签可选,最多配置一个,如果不配置该标签,就不会生成 Mapp 接口。

  JavaClientGenerator 标签中的 type 属性非常重要,此处提供些选择的建议。

    · XMLMAPPER :推荐使用,将接口和 XML 完全分离,容易维护,接口中不出现 SQL
句,只在 XML 中配置 SQL ,修改 SQL 时不需要重新编译。
ANNOTATEDMAPPER :不推荐使用,纯注解方式的好处是, SQL 都在 Java 代码中,基
本上只在 处写代码,看着方便。但是实际上维护不容易,写 SQL 过程中需要大量字
符串拼接操作,复杂情况需要大量的 Java 判断,代码很乱,不容易维护。
MIXEDMAPPER :不推荐使用,这种情况下注解和 XML 混合使用会很乱,不利于维护

    示例如下:

<javaClientGenerator type = "XMLMAPPER" targetPackage = "test.dao"
        targetProject="src\main\java"/>

  · table 标签:table 是最重要的一个标签,该标签用于配置需要通过内省数据库的表,只有在 table中配置过的表,才能经过上述其他配置生成最终的代码,该标签至少要配置 一个,可以配置多个。如果指定这个标签, MBG 将在生成 insert SQL 映射文件中插入 selectKey 标签。table 标签有 个必选属性 tableName ,该属性指定要生成的表名,可以使用 SQL 通配符匹配多个表。

  · generatedKey (0个或多 个):该标签用来指定自动生成主键的属性( identity 字段或者 sequeces 序列)。

  例子如下:

<table tableName= "user login info" domainObjectName="UserLoginInfo">
        <generatedKey column = "id " sqlStatement = "MySql"/>
</ table>

  · columnRenamingRule (0个或多 个):该标签最多可以配置一个,使用该标签可以在生成列之前对列进行命名 。这对于那些由于存在同前缀的字段因此想在生成属性名时去除前缀的表非常有用。

<columnRenamingRule searchString="cust" replaceString=""/>

  · columnOverride (0个或多个):该标签用于将某些默认计算的属性值更改为指定的值,标签可选,可以配置多个。该标签有一个必选属性 column 表示要重写的列名。

  · ignoreColumn (0个或多个):该标签可以用来屏蔽不需要生成的列 ,该标签可选,可以配置多个,该标签有一个必选属性 column ,表示要忽略的列名。

 以上就是代码生成器中涉及到的所有标签和属性。

文件配置代码如下:

<?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>
    <context id="MySqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="~"/>
        <property name="endingDelimiter" value="~"/>

        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://47.100.59.91:3306/mybatis"
                        userId="root"
                        password="Aa12345&amp;_">
        </jdbcConnection>
        
        <javaModelGenerator targetPackage="test.model" 
                            targetProject="src\main\java">
            <property name="trimStrings " value="true"/>
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="test.xml" 
                         targetProject="src\main\resource">
        </sqlMapGenerator>

        <javaClientGenerator  targetPackage="test.dao"
                              targetProject="src\main\java">
        </javaClientGenerator>

        <table tableName="%">
            <generatedKey column="id" sqlStatement="MySql"/>
        </table>
        
    </context>
   

</generatorConfiguration>

至此,结束。