generatorConfig.xml文件中标签配置详解
一、首选需要添加文件头:
<?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,二者只能用其一,而且用法各有不同。
<classPathEntry location=” E: \mysql\mysql-connector java-5.1.29.jar” />
3. context标签:该标签至少配置一 个,可以配置多个。其主要用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行的时候还可以指定要运行的 context。
(1)标签属性如下:
· id:此属性必填,用于唯一确定该标签。
· defaultModelType:定义MBG如何生成实体类,该属性有以下可选值:
· conditional:默认值,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,而是会将该字段合并到基本实体类中。
· flat:该模型只为每张表生成一个实体类,这个实体类包含表中的所有字段,这种模型最简单,推荐使用。
· hierarchical :如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有 BLOB 字段,则会为表生成 一个包含所有 BLOB 字段的单独的实体类,然后为所有其他的 字段另外生成一个单独的实体类。 MBG 会在所有生成的实体类之间维护一个继承关系。
· introspectedColumnimpl :该参数可以指定扩展 org mybatis. generator.api.Introspected Column 类的实现类。
一般写法如下:
<context id=”Mysql ” defaultModelType=”flat ” >
(2)context标签下包含众多子标签,各子标签都有严格的顺序,如下所示:
· property标签:此标签包含和三个分隔符有关的属性,分别如下:(有时候表名是“sys user”,如果sql语句是 select * from user info,会出现报错,这时就需要反向单引号解决此问题)
<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 属性进行配置。
<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 即可。这里提供 个简单例子供参考,假设实
<jdbcConnection driverClass="com.mysql.jdbc .Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password=" "> </jdbcConnection>
· javaTypeResolver标签:用来指定 JDBC 类型和 Java 类型如何转换,最多可以配置一个。一般默认,不随便改
· javaModelGeneratoor标签:该标签用来控制生成的 体类,根据 context 标签中配置的 defaultModelType 属性值的不同,一 表可能会对应生成 个不同的实体类。一个表对应多个类时使用并不方便,所以前面推荐使 flat ,保证 一个表对应一个实体类。该标签必须配置一个,并且最多配置一个。
该标签只有两个必选属性:
public void setUsername(String username) { this.username = username ==null ? null : username , trim(); }
<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 将只生成实体类。
该标签只有两个必选属性
<sqlMapGenerator targetPackage="test.xml" targetProject= "E: \MyProject\src \ma in\resources" > <property name="enableSubPackages" value="false"/> </sqlMapGenerator>
· javaClientGenerator标签:该标签用于配置 Java 客户端生成器( Mapper 接口)的属性,该标签可选,最多配置一个,如果不配置该标签,就不会生成 Mapp 接口。
JavaClientGenerator 标签中的 type 属性非常重要,此处提供些选择的建议。
示例如下:
<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&_"> </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>
至此,结束。