这篇文章是对 MyBatis Generator 官网中 XML 配置文件相关内容的大致翻译。
MyBatis Generator(MBG)由XML配置文件驱动。配置文件会告知 MBG:
- 如何连接数据库
- 哪些对象需要被生成,以及如何生成它们
- 哪些数据表需要被利用来生成对象
MBG可生成三种文件:
- Java Model Objects(.java)--------POJO
- SQL Map Files(.xml)--------数据库查询映射
- Java Client Objects(.java)--------DAO
如下是一个MBG配置文件的例子。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" /><context id="DB2Tables" targetRuntime="MyBatis3"><jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"connectionURL="jdbc:db2:TEST"userId="db2admin"password="db2admin"></jdbcConnection><javaTypeResolver ><property name="forceBigDecimals" value="false" /></javaTypeResolver><javaModelGenerator targetPackage="test.model" targetProject="\MBGTestProject\src"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><sqlMapGenerator targetPackage="test.xml" targetProject="\MBGTestProject\src"><property name="enableSubPackages" value="true" /></sqlMapGenerator><javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="\MBGTestProject\src"><property name="enableSubPackages" value="true" /></javaClientGenerator><table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" ><property name="useActualColumnNames" value="true"/><generatedKey column="ID" sqlStatement="DB2" identity="true" /><columnOverride column="DATE_FIELD" property="startDate" /><ignoreColumn column="FRED" /><columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /></table></context>
</generatorConfiguration>
重要说明:
- 该文件指定使用旧版DB2 CLI驱动连接数据库,并告诉MBG如何找到该驱动。<classPathEntry>是<generatorConfiguration>的可选子元素,指定数据库连接驱动(jar/zip文件)的全路径地址。
- <jdbcConnection> 指定内省数据表所需的数据库连接属性。
- <javaTypeResolver> 定义the Java Type Resolver的属性,其中的forceBigDecimals属性指明MBG是否应该强制为数据库中的数字类型在java环境中使用java.math.BigDecimal。默认情况下,即foreceBigDecimals=false,The Java Type Resolver会通过在可行的情况下改变整数类型来简化JDBC decimal 和 numeric类型的使用。如果结果不如意,可将“foreceBigDecimals”设置为true,此时,只要数据库中的字段是数字类型(decimal和numeric)的,The Java Type Resolver就会使用java.math.BigDecimal。详情可见下图。
- <javaModelGenerator> 定义the Java Model Generator的属性,the Java Model Generator通过与内省表匹配的类来构建主键类、记录类和查询。enableSubPackages属性决定MBG是否为基于内省数据表的catalog和schema生成不同的Java包。例如,假设一个数据表MYTABLE在schema MYSCHMA中,并假设targetPackage属性被设置为”com.mycompany“,如果enableSubPackages = true,生成的实体类会被放置在”com.mycompany.myschema“包路径下,若为false,生成的实体类将被放置于”com.mycompany“包路径下。trimStrings属性决定MBG是否为从数据库中返回的字符字段去除末尾空格,如果数据库以char类型而不是varchar类型存储数据,这个属性很有用,当trimStrings = true时,MBG会消除字符字段末尾的空格。
- <javaClientGenerator> 定义 the Java Client Generator属性,the Java Client Generator会创建可轻易使用被生成的Java模型和XML映射文件的Java接口和类。该enableSubPackages属性与<javaModelGenerator>类似。
- <table> 指定哪些数据表被内省。这个文件只指定了一个数据表被内省,但也可以指定多个。useActualColumnNames属性决定生成的实体类的属性名是否使用真实的数据表字段名,若为false,MBG会使用数据表字段名的驼峰形式。
- <generatedKey> 是<table>的可选子元素,它被用来指定某字段为自动生成的键。通过指定该元素,MBG将在SQL映射文件中的<insert>元素内生成适当的<selectKey>元素,以解决Insert数据时不支持主键自动生成的问题。
- <columnOverride> 是<table>的可选子元素,它被用来改变内省数据库字段的特定属性,而不是生成默认值。以上面MBG配置文件为例子。数据表中的字段“DATE_FIELD”将与名为“startDate”的属性映射,而不是与同名的或名为“dateField”(当useActualColumnsNames = false时)的属性映射;“LONG_VARCHAR_FIELD”字段将被认为是VARCHAR类型,而不管其真实类型。更多内容如下。
- <ignoreColumn>指定被忽视的数据表字段。被忽视的字段不会出现在实体类的属性和SQL映射语句中。
以下是未出现在以上配置文件中的标签元素
- <columnRenamingRule> 指定数据表字段重命名规则。
- <commentGenerator>指定有关于生成注释的属性。
- <context> 指定用户生成各种文件(mapper文件、实体类文件等)的环境,其子元素被用来指定所需生成对象的类型以及需要连接的数据库。在<generatorConfiguration>下可以放置多个<context>,以允许在一次运行中从不同数据库中或以不同参数生成对象。
- <domainObjectRenamingRule> 指定实体类文件重命名的规则。
- <sqlMapGenerator> 定义the SQL Map Generator的属性,the SQL Map Generator负责为各个内省数据表创建由MyBatis/iBATIS格式化的SQL映射文件。
更多信息可参阅 MyBatis Generator 官网。