本章节介绍代码生成器的内容,主要分为两个部分,第一部分介绍配置文件,第二部分介绍生成代码的方式。在末尾给出我正在使用的配置文件
1、配置文件
图5- 1 配置文件结构图
1.1 公共
公共部分指引入properties资源文件,引入jar资源文件。它们与上下文无关,定义在上下文外部。
1.1.1 properties
表格5- 1 Properties标签
描述 |
加载Properties文件中的key-value对。 |
|
属性 |
url |
描述:从url路径中加载properties文件 |
示例:file:///C:/folder/jdbc.properties |
||
属性 |
Resource |
描述:从classpath上加载properties文件 |
示例:resources/properties/jdbc.properties |
||
关系 |
可以存在0..1个,通常会引入jdbc.properties文件 |
|
示例 |
<properties resource="prop/jdbc.properties"/> |
|
链接 |
http://mybatis.org/generator/configreference/properties.html |
1.1.2 classpathEntry
表格5- 2 classpathEntry标签
描述 |
引入必要jar包。例如数据库驱动jar包,commonMapper的核心jar包等等。如果需要引入多个jar包,需要配置多个classpathEntry,不能指定多个location。 |
|
属性 |
Location |
描述:指定jar包的位置。 |
示例:C:/folder/mysql-connector-java-5.1.29.jar。 |
||
关系 |
可以存在0..n个,通常会引入mysql的驱动jar包和mybatis-generator的jar包 |
|
示例 |
<!-- 本地数据库驱动程序jar包的全路径 --> <classPathEntry location="${path}mysql-connector-java-5.1.38.jar" /> <classPathEntry location="${path}mapper-generator-1.0.0.jar" /> |
|
链接 |
http://mybatis.org/generator/configreference/classPathEntry.html |
1.2 context
1.2.1. 结构图
图5- 2 context结构图
表格5- 3 context标签
描述 |
指定上下文 |
|
属性 |
Id |
描述:在一份配置文件中必须唯一,通常使用应用或者数据类型来标识 |
示例:id=”mysql”,id=”systemA”,id=”systemB” |
||
属性 |
DefalutModelType |
描述:定义如何生成实体类。
|
示例:defaultModeType=”conditional”。 |
||
属性 |
TargetRuntime |
描述:指定生成代码的运行环境,支持mybatis3,Mybatis3Simple。Mybatis3Simple不会生成Example相关的类型。个人不推荐其他两种方式,是因为它们会生成注解,不会生成XML文件。 |
示例:targetRuntime=”mybatis”。 |
||
属性 |
Introspected ColumnImpl |
描述:可以指定接口的实现类,一般自己不会编写生成代码的逻辑。可以看一下。 |
示例:默认不指定。 |
||
子标签 |
|
|
示例 |
内容过多不予展示,参考完整示例下面。 |
|
链接 |
1.2.2 上下文属性
表格5- 4 Property属性
描述 |
定义当前上下文的变量。其中name必须对应Context对象的属性名称 |
|
属性 |
name |
描述:从url路径中加载properties文件 |
示例: 无 |
||
属性 |
value |
描述:从classpath上加载properties文件 |
示例:无 |
||
示例 |
<property name="javaFileEncoding" value="UTF-8" /> |
|
链接 |
1.2.3 插件
表格5- 5 plugin属性
描述 |
配置插件,每种插件都有自己的属性。当使用commonMapper时,需要配置MapperPlugin,这个插件的属性可以查看该对象的属性。 |
示例 |
插件的类型查看http://www.mybatis.org/generator/reference/plugins.html |
链接 |
1.2.4 注释
表格5- 6 commentGenerator
描述 |
指定生成Java注释的策略。不指定时不会生成注释,使用type属性指定为myCommentGenerator时,需要编译java文件,并放入项目的classpath下。默认情况下为框架自带的DefaultCommentGenerator,property配置该类的属性 |
|
属性 |
type |
描述:指定生成注释的类型。 |
示例:tk.mybatis.generator.MyCommentGenerator。 |
||
子标签 |
property |
|
示例 |
使用时需要首先编写CommentGenerator类,然后将编译之后的class文件添加到generator-core.jar包中,路径为tk.mybatis.generator。这个对应文件夹层次结构。 |
|
链接 |
1.2.5 数据库连接
表格5- 7 jdbcConnection
描述 |
定义数据库的连接池信息。 |
|
属性 |
Driver |
描述:连接池中的驱动 |
示例:com.mysql.jdbc.Driver |
||
属性 |
url |
描述:连接池的url地址 |
示例:jdbc:mysql://localhost:3306/${schema_name} |
||
属性 |
userId |
描述:用户名 |
示例:${userName} |
||
属性 |
password |
描述:密码 |
示例:${password} |
||
示例 |
无 |
1.2.6 javaTypeResolver
表格5- 8 类型转换器
描述 |
配置类型转换策略,一般是数字的类型转换策略。如果大于18,则为BigDecimal,介于9到18之间Long,介于5到9之间int,介于0到5之间为Short。属性只有一个forceBigDecimal,是否全部使用BigDecimal类型。 |
示例 |
<javaTypeResolver> |
1.2.7 代码生成
代码生成器主要生成XML文件,java实体类,Mapper接口三种文件。
1.2.7.1 javaModelResolver
表格5- 9 生成java代码实体类
描述 |
生成Java实体类。 |
|
属性 |
targetPackage |
描述:指定生成包的路径 |
示例:com.XX.bean。 |
||
属性 |
targetProject |
描述:指定项目的路径,这个指磁盘的绝对路径 |
示例:D:${project_path}。 |
||
子标签 |
property |
|
1.2.7.2 sqlMapGenerator
表格5- 10 sqlGenerator
描述 |
生成Mapper的XML文件。 |
|
属性 |
targetPackage |
描述:指定生成包的路径 |
示例:com.XX.xml。 |
||
属性 |
targetProject |
描述:指定项目的路径,这个指磁盘的绝对路径 |
示例:D:${project_path}。 |
||
子标签 |
property |
enableSubPackages:如果为true,MBG会根据catalog和schema来生成子包。 |
1.2.7.3 javaClientGenerator
表格5- 11 javaClientGenerator
描述 |
生成XXExample和Mapper接口相关类。 |
|
属性 |
targetPackage |
描述:指定生成包的路径 |
示例:com.XX.mapper。 |
||
属性 |
targetProject |
描述:指定项目的路径,这个指磁盘的绝对路径 |
示例:D:${project_path}。 |
1.2.8 Table
1.2.8.1 结构图
图5- 3 table标签
表格5- 12 table标签
描述 |
配置数据库表与Java实体之间的映射关系。 |
|
属性 |
tableName |
描述:指定数据库的表名,%表示占位符,和SQL语句的like匹配字符一样。必选参数 |
示例:tableName=”user%”生成user相关的表。%生成所有表。 |
||
属性 |
schema |
描述:数据库的schema,指定数据库实例。一般在数据库url上添加。 |
示例:schema=”learning_mybatis” |
||
属性 |
alias |
描述:数据表的别名。 |
示例:批量生成时无法指定。只有生成单个表时有用。 |
||
属性 |
domainObjectName |
描述:生成对象的名称,如果不指定,默认为驼峰方式。 |
示例:批量生成时无法指定。只有生成单个表时有用。 |
||
属性 |
mapperName |
描述:生成XML文件的名称,如果不指定,默认为驼峰方式 |
示例:批量生成时无法指定。只有生成单个表时有用。 |
||
属性 |
EnableXXX |
描述:XXX代表生成SQL方法,该属性来指定生成对应的XXX语句。例如enableSelectByPrimaryKey会生成selectByPrimaryKey的方法。 |
示例:生成XXMapper.xml时会有用。 |
||
属性 |
EnableXXXExample |
描述:会专门生成XXXExample的类,这些类一般用不到,所以通常都设置为false即可。 |
示例:生成XXMapper.xml时会有用。 |
||
属性 |
selectByPrimaryKeyQueryId |
描述:DBA跟踪工具。类似的有selectByExampleQueryid。 |
示例:生成XXMapper.xml时会有用。 |
||
属性 |
selectByPrimaryKey QueryId |
描述:DBA跟踪工具。类似的有selectByExampleQueryid。 |
示例:。 |
||
属性 |
modelType |
描述:和context中的defaultModelType相等。 |
示例:。 |
||
属性 |
escapeWildcards |
描述:是否转义通配符%和_。 |
示例:。 |
||
属性 |
delimitIdentifiers |
描述:是否给标识符增加分隔符。 |
示例:。 |
||
属性 |
delimitAllColumns |
描述:是否对所有列添加分割符,默认为false。 |
示例:。 |
||
子标签 |
|
|
示例 |
一般都是批量生成实体类,所以列与属性之间的映射一般用不到,除非生成单个实体类。 |
|
链接 |
1.2.8.2 表映射
1.2.8.2.1 domainObjectRenamingRule
表格5- 13 domainObjectRenamingRule标签
描述 |
配置表名与类名之间的映射关系,通常用于去除表名称中的前缀。 |
||
属性 |
searchString |
描述:表名称中需要被替换的oldStr或正则表达式 |
|
示例:无 |
|||
属性 |
replaceString |
描述:表名称中替换的newStr |
|
示例: |
|||
示例 |
<domainObjectRenamingRule searchString="^Sys" replaceString="" /> |
||
链接 |
http://mybatis.org/generator/configreference/domainObjectRenamingRule.html |
1.2.8.3 列映射
1.2.8.3.1 columnRenamingRule
表格5- 14 columnRenamingRule
描述 |
设置列转换为属性的命名规则,一般不会用到,默认是驼峰方式。 |
||
属性 |
searchString |
描述:列名称中被替换的oldStr或正则表达式 |
|
示例:无 |
|||
属性 |
replaceString |
描述:列名称中替换的newStr |
|
示例: |
|||
示例 |
<domainObjectRenamingRule searchString="^Sys" replaceString="" /> |
||
链接 |
http://mybatis.org/generator/configreference/columnRenamingRule.html |
1.2.8.3.2 columnOverride
表格5- 15 columnOverride标签
描述 |
设置列与属性的映射关系,主要是数据类型。名称默认使用驼峰即可。 |
||
属性 |
Column |
描述:列名 |
|
属性 |
Property |
描述:java类属性的名称,无值使用默认驼峰方式 |
|
属性 |
javaType |
描述:java属性的类型 |
|
属性 |
JdbcType |
描述:数据库列的类型 |
|
属性 |
delimitedColumnName |
描述:生成@Column注解时,是否启用分割符,会用到context对象的beginDelimiter和endDelimiter两个属性 |
|
属性 |
isGeneratedAlways |
略,待补充 |
|
示例 |
<domainObjectRenamingRule searchString="^Sys" replaceString="" /> |
||
链接 |
http://mybatis.org/generator/configreference/columnOverride.html# |
1.2.8.3.3 ignoreColumn
表格5- 16 ignoreColumn
描述 |
建立表与类之间的映射关系时,忽略哪些列。其中column指定的是具体的列名,如果要指定正则表达式,使用ignoreColumnByRegex |
||
属性 |
Column |
描述:列名 |
|
示例 |
< ignoreColumn column=”name”/>此时会忽略name列。Java实体类中不会存在name属性 |
||
链接 |
http://mybatis.org/generator/configreference/ignoreColumn.html |
2、生成方式
2.1 代码方式
- 第一步,编写相应的配置文件,在classpath添加mysql的jar包,generator_core的jar包。
- 第二步,修改Generator.java类,将类中的文件路径指向相应的配置文件。
- 运行即可。
代码方式是最常用的方式,最方便的方式。
2.2 命令行方式
使用java -Dfile.encoding=UTF-8 –jar jarPath -configfile configPath -overwrite。
- File.encoding:指定文件的路径。
- jarPath:generator-core.jar的路径。
- configfile:指定配置文件的路径
- overwrite:默认会覆盖已存在的文件。
一般不用这种方式,生成的文件都在当前文件夹下面,还需要拷贝到其他地方。但是最简单的方式。
3、示例
<?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> <!-- 本地数据库驱动程序jar包的全路径 --> <classPathEntry location="mysql驱动jar地址" /> <classPathEntry location="mybatis-generator的jar地址" /> <!-- 配置上下文 --> <context id="context" defaultModelType="conditional" targetRuntime="MyBatis3"> <!-- 配置property属性 --> <property name="autoDelimitKeywords" value="false" /> <!-- 生成的Java文件的编码 --> <property name="javaFileEncoding" value="UTF-8" /> <!-- 格式化java代码 --> <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter" /> <!-- 格式化XML代码 --> <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter" /> <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; --> <property name="beginningDelimiter" value="`" /> <property name="endingDelimiter" value="`" /> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <property name="mappers" value="tk.mybatis.mapper.common.Mapper" /> <property name="IDENTITY" value="MYSQL" /> <property name="caseSensitive" value="true" /> <property name="forceAnnotation" value="true" /> <property name="beginningDelimiter" value="`" /> <property name="endingDelimiter" value="`" /> </plugin> <!-- 配置生成注解的方式 --> <commentGenerator type="org.mybatis.generator.api.MyCommentGenerator"> <!-- <property name="suppressAllComments" value="true"/> <property name="addRemarkComments" value="false"/> <property name="suppressDate" value="true"/> --> </commentGenerator> <!-- 数据库的相关配置 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/personal_life?nullCatalogMeansCurrent=true&serverTimezone=UTC" userId="用户名" password="密码" /> <!-- 类型处理器 --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 实体类生成的位置 --> <javaModelGenerator targetPackage="实体类包名" targetProject="项目磁盘路径"> <property name="enableSubPackages" value="true" /> <!-- 在insert字段时,此值会自动对字符串进行trim --> <property name="trimStrings" value="true" /> <!--此值设置为true时不生成set方法 --> <property name="immutable" value="false" /> </javaModelGenerator> <!-- *Mapper.xml 文件的位置 --> <sqlMapGenerator targetPackage="XML存放路径" targetProject="项目resources文件夹路径"> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- Mapper 接口文件的位置 --> <javaClientGenerator targetPackage="mapper接口的包名" targetProject="项目磁盘地址" type="XMLMAPPER"> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 相关表的配置 --> <table tableName="economic_consume_wish_%" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false"> <!-- 在insert语句前自动生成selectKey标签 --> <generatedKey column="id" sqlStatement="MySql" identity="true" /> <!-- 表在映射时的生成策略 --> </table> </context> </generatorConfiguration>