上一篇《mybatis学习(2) - MyBatis Generate的使用》介绍了MBG的入门及简单使用,本篇中再详细的学习一下生成配置文件,官方配置文件标签说明地址:http://mybatis.org/generator/configreference/xmlconfig.html,我们直接使用多层注释来理解他的配置文件,个人感觉这种效果最好。
<?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>
<!-- 使用的数据库驱动地址(可以为zip、jar等),数量:0~N -->
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
<!-- 一组对象环境,一般对应一个数据库,如果多个数据库组,可以使用不同的id来区分 数量:1~N -->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 数据库连接信息,需要注意JDBC的驱动是否在classpath下,如果不在,可使用classPathEntry引入 -->
<!-- userId & password为密码 & 账号 -->
<jdbcConnection
driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
connectionURL="jdbc:db2:TEST"
userId="db2admin"
password="db2admin">
</jdbcConnection>
<!-- java类型转换配置,数量:0~1 -->
<javaTypeResolver >
<!--
数字转换规则:
如果精度>0或者长度>18,就会使用java.math.BigDecimal
如果精度=0并且10<=长度<=18,就会使用java.lang.Long
如果精度=0并且5<=长度<=9,就会使用java.lang.Integer
如果精度=0并且长度<5,就会使用java.lang.Short
-->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- java模型生成器,targetPackage,表示此模型类所属包,targetProject,源代码生成路径。数量:1 -->
<javaModelGenerator targetPackage="test.model" targetProject="\MBGTestProject\src">
<!-- 生成的类是否只包含getter,不包含setter,只对MyBatis3有效,默认为false -->
<property name="constructorBased" value="true" />
<!-- 是否使用子包,意思允许,那么生成的类放在以schema为子包名的文件夹中,默认为false -->
<property name="enableSubPackages" value="true" />
<!-- 实体类属性是否可变,如果设置了,会忽略constructorBased,并不生成setter函数,并直接影响构造函数,默认false -->
<property name="immutable" value="true" />
<!-- 所有类的基类,需要使用全名称 -->
<property name="rootClass" value="example.com.baseModel" />
<!-- 是否对数据库结果进行trim操作 -->
<property name="trimStrings" value="true" />
<!-- 对实例对象使用不同的包名,不设置与实力一样 -->
<property name="exampleTargetPackage" value="" />
<!-- 对实例对象使用不同的目标项目,与上面描述类似 -->
<property name="exampleTargetProject" value="" />
</javaModelGenerator>
<!-- 映射文件生成配置,假设没有指定,则不会生成xml文件。targetPackage,表示此模型类所属包,targetProject,源代码生成路径。数量:0~1 -->
<sqlMapGenerator targetPackage="test.xml" targetProject="\MBGTestProject\src" >
<!-- 与上方类似 -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 字面意思也能理解,java客户端创建,意思就是调取接口的生成配置了,数量:0~1 -->
<!--
type 的类型
ANNOTATEDMAPPER: 基于注解的Mapper接口,无对应xml映射文件
MIXEDMAPPER: 混合形式
XMLMAPPER: 所有方法都在xml中
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="\MBGTestProject\src">
<!-- 与上方类似 -->
<property name="enableSubPackages" value="true" />
<!-- 所有接口继承的父接口,可以通过table配置的属性覆盖 -->
<property name="rootInterface" value="" />
</javaClientGenerator>
<!-- 配置需要获取的表,只有配置才能生成对应文件,数量:1~N -->
<!--
tableName 指定生成的表名,可以通过通配符获取多个
schema 数据库的schema,生成的sql语句表为 schema.tableName
catalog 数据库的catelog,生成的sql表名会变成 schema.tableName
alias 别名
domainObjectName 生成实体对象的基本名称
enable? 表示是否允许某个设置
selectByPrimaryKeyQueryId
selectByExampleQueryId
modelType 针对表配置,会覆盖context中的defaultModelType
escapeWildcards
delimitIdentifiers 是否给标识符添加分隔符,默认flase
delimitAllColumns 是否对所有列添加分隔符,默认false
-->
<table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
<!-- 与上相似 -->
<property name="constructorBased" value="false" />
<!-- 动态sql支持类名 -->
<property name="dynamicSqlSupportClassName" value="" />
<!-- 动态表名生成的类使用的名称 -->
<property name="dynamicSqlTableObjectName" value="" />
<!-- 是否将模式或目录在运行时添加到生成的SQL表名中,默认false -->
<property name="ignoreQualifiersAtRuntime" value="true" />
<!-- 同上 -->
<property name="immutable" value="true" />
<!-- 是否只为表生成模型类 -->
<property name="modelOnly" value="true" />
<!-- 同上 -->
<property name="rootClass" value="" />
<!-- 同上 -->
<property name="rootInterface" value="" />
<!-- 运行时目录,覆盖之前设置的catalog -->
<property name="runtimeCatalog" value="" />
<!-- 同上,覆盖之前的schema -->
<property name="runtimeSchema" value="" />
<!-- 使用它,就覆盖了之前的tableName -->
<property name="runtimeTableName" value="" />
<!-- 此属性可用于指定将添加到selectAll方法中的order by子句,仅包含列列表字段 -->
<property name="selectAllOrderByClause" value="" />
<!-- 默认值从javaModelGenerator继承,否则为false -->
<property name="trimStrings" value="true" />
<!-- true表示实体对象的属性为元数据获取的列名,反之尝试将名称转换为驼峰形式,默认为false -->
<property name="useActualColumnNames" value="false" />
<!-- 是否使用列索引 -->
<property name="useColumnIndexes" value="true"/>
<!-- 生成属性是否会将列名和备注链接起来 -->
<property name="useCompoundPropertyNames" value="" />
<!-- 配置自动生成主键的属性 数量:0~1 -->
<!--
column: 列名
sqlStatement:将返回新值的SQL语句,如果这个是identity列,可以使用预设值:
Cloudscape、DB2、DB2_MF、Derby、HSQLDB、MySql、SqlServer、SYBASE、JDBC
-->
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<!-- 生成列之前,对列名称进行重命名,通过搜索searchString,然后替换为replaceString来重新命名 -->
<columnRenamingRule searchString="" replaceString="" />
<!-- 优先于columnRenamingRule规则 数量:0~N -->
<!--
column:要重写的列名
property:要使用的java属性名称
javaType:使用的java类型
jdbcType:该列的jdbc类型,如果需要可以覆盖此类型
typeHandler:用户需要的用来处理这列的类型处理器
delimitedColumnName: 指定是否在生成的SQL列名称上增加分隔符
-->
<columnOverride column="DATE_FIELD" property="startDate" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
<!-- 可忽略的值,数量:0~N -->
<!--
column:忽略的列名
delimitedColumnName:匹配列名是否区分大小写
-->
<ignoreColumn column="FRED" />
</table>
</context>
</generatorConfiguration>
以上配置文件基本上囊括了所有生成配置,但实际生产中我们应该只会用到常见的一些配置属性,其它的一般使用默认的配置即可。
下一篇,我们来学习下如何将mybatis及mbg整合进spring项目中。