Mybatis 代码生成器
在学习第 MyBatis 的基本用法时,我 写了很多单表的增、删、改、查方法,基本上每个表都要有这些方法 这些方法都很规范并且也比较类似当数据库表的字段 较少的时候,写起来还能接受, 旦字段过多或者需要在很多个表中
写这些基本方法时 就会很麻烦,不仅需要很大的代码量,而且字段过多时很容易出现错乱尤其在新开始 个项目时 如果有 十个甚至上百个表需要从头编写,这将会带来很大的量,这样的工作除了能让我 反复熟练这些基本方法外,完全就是重复的体力劳动。作为 个优秀的程序员,“懒”是很重要的优点 我们不仅要会写代码,还要会利用(或自己实现)工具生成代码。 MyBatis 的开发团队提供了 个很强大的代码生成器一一MyBatisgenerator ,后文中会使用缩写 MBG 来代替。
MBG 通过丰富的配置可以生成不同类型的代码,代码包含了数据库表对应的实体mapper 接口类、 Mapper XML 文件和 Exampl 对象等,这些代码文件中几乎包含了全部的单表操作方法,使用 MBG 可以极大程度上方便我们使用 Mybatis ,还可以减少很多重复操作章会详细介绍常用的配置信息和 些重要的配置信息,涉及不全面的地方可以通过官方档进行深入学习,链接是 http 😕/www mybatis. rg/ge rat /。如果大家更喜欢看中文文档,也可以
看由作者组织翻译的中文文档,链接是 http 😕/ mbg. cndocs.tk
MBG 版本和 MyBati 没有直接关系,本章使用的 MB 版本为 1.3.3 ,不同的MBG 版本包含的参数可能不 所以 学习本章的时候,建议使用 1.3.3 版本MBG 可以 MyBati iBATIS 的代码,本章不会涉及和 ibATIS 有关的配直
1、XML 配置详解
MBG 具有丰富的配置可供使用 这些配置需要以 XML 形式的标签和属性来实现,所以本节就对 MBG XML 配置进行详细介绍。如果从来没有接触过 ,并且想在学习过程中XML 中的各种配置 建议先阅读 节提供的 个简单配置和 5.3 节中关于如何运行 MBG的内容 当可以正常运行 MBG 时,再从 5.1 节看起 如果使用过 ,也可以直接从 5.1
开始阅读。首先按照 MBG 的要求添加 XML 的文件头。
<?xml version 1. encoding UTF?>
<!DOCTYPE generatorConfiguration PUBLIC ” -/ /mybatis . org/ /DTD MyBatis Generator Configuration 1 . 0/ /EN” ” http://mybatis . org/dtd/mybatis-generator-config 1 0 . dtd” >
这个文件头中的 ti ge nerator-config 1 _ 用于定义该配置文件中所有标签和属性的用法及限制,在文件头之后,需要写上 XML 文件的根节点 generatorConf iguration
<generatorConfiguration>
〈! 一具体配直内容一>
</generatorConfiguration>
上面这两部分内容是 MBG 必备的基本信息 后面是 MBG 中的自定义配置部分。下面先介
generatorConfiguration 标签下 个子级标签,分别是 properties
classPathEntry context 。在配置这 个标签的时候,必须注意它们的顺序,要和这里
列举的顺序一致 在后面列举其他标签的时候,也必须严格按照列举这些标签的顺序进行配置
个是 properties 标签。这个标签用来指定外部的属性元素,最多可以配置 个,也
可以不配置。
properties 标签用于指定一个需要在配置中解析使用的外部属性文件 引入属性文件
后,可以在配置中使用${ property }这种形式的引用,通过这种方式引用属性文件中的属性值,
对于后面需要配置的 JDB 信息会很有用
properties 标签包含 resource url 两个属性,只能使用其中 个属性来指定,同
时出现则会报错。
resource 指定 classpath 下的属性文件,类似 com/myproject/generatorConfig
properties 这样的属性值。
• url 指定文件系统上的特定位置,例如巳le ///C /myfolder/generatorConfigpropert
第二个是 classPathEntry 标签。这个标签可 以配置多个, 可以不配置。
cla ssPathEntry 标签最常见的用法是通过属性 location 指定驱动的路径,代码如下。
<classPathEntry location=” E: \mysql\mysql-connector java- 5 . 1 . 29.jar” />
这个标签还可以用于 5.1.6 节中,通过使用这种方式指定 rootClass 属性配直类所在的 jar
第三个是 context 标签。这个标签是要重点讲解的,该标签至少配置 个,可以配置多个
co ntext 标签用于指定生成 组对象的环境。例如指定要连接的数据库,要生成对象的类
型和要处理的数据库中的表。运行 的时候还可以指定要运行的 context
context 标签只有一个必选属 id ,用来唯 确定该标签,该 id 属性可以在运行 MB
时使用 此外还有几个可选属性
defaultModelType :这个属性很重要,定义了 MBG 如何生成实体类。该属性有以
下可选值
conditional 默认值,和下面的 hierarchical 类似,如果 个表的主键只
有一个字段,那么不会为该字段生成单独的实体类,而是会将该字段合并到基本实
体类中。
flat :该模型只为每张表生成 个实体类。这个实体类包含表中的所有字段
种模型最简单,推荐使用。
hierarchical :如果表有主键,那么该模型会产生 个单独的主键实体类,如
果表还有 BLOB 字段,则会为表生成 个包含所有 BLOB 字段的单独的实体类,然
后为所有其他的字段另外生成 个单独的实体类。 MBG 会在所有生成的实体类之
间维护 个继承关系。
targetRuntime :此属性用于指定生成的代码的运行时环境,支持以下可选值
MyBatis3 默认值。
);;> MyBatis3Simple 这种情况不会生成与 Example 相关的方法
introspectedColumnimpl 该参数可以指定扩展 org mybat 工 S . generator.api. Introspected Column 类的实现类。般情况下,使用如下配置即可。
<context id=”Mysql ” defaultModelType=”flat ” >
如果不希望生成和 Examp le 查询有关的内容,则可以按照如下方法进行配置
<context id=” Mysql ” targetRuntime=”MyBatis3Simple ” defaultModelType=”flat ” >
MBG 配置中的其他几个标签基本上都是 context 的子标 ,这些子标签(有严格的配置顺序,后面括号中的内容为这些标签可以配置的个数)包括以下几个。
• property (0 个或多个)
• plugin (0 个或多个)
* commentGenerator (0 个或 个〉
* jdbcConnection 个)
* javaTypeResolver 个或 个〉
* javaModelGenerator ( 个)
* sqlMapGenerator (0 个或 个)
* javaClientGenerator (0 个或 个)
• table 个或多个)
下面逐条介绍这些重要的标签。
1.1、prperty 标签
在开始介绍 property 标签前 先来了解一下数据库 中的分隔符
举一个简单的例子,假设数据库中有一个表 user 注意这 名字 user
inf 中间存在 个空格。如果直接写如下查询 在数据库执行这 查询 会报错。
select * from user info
可能会提示 user 表不存在或者 user 近有语法错误 情况下该怎么写 user info
表呢?
这时就会用到分隔符,在 ySQL 中可以使用反单引号“、”作为分隔符,例如、 user info 、,
SQL Server 中则是[ user info ]。通过分隔符可以将其中 的内 容作为一个整体的字符串进
行处理,当 QL 中有数据库关键字时,使用反单 号括住关键字 避免数据库产生错误。
这里之所以先介绍分隔符,就是因为 property 标签中包含了以下 个和分隔符相关的属性。
• autoDelimitKeywords
• beginningDelimiter
• end ngDe miter
从名字可以看出,第 个是自动给关键字添加分隔符的属性。 MBG 中维护了 个关键字列表,
当数据库的字段或表与这些关键字 样时, MBG 会自动给这些字段或表添加分隔符。关键字列表
可以查看 MBG 中的 org.mybatis.ge erator internal db SqlReservedWords 类。
后面两个属性很简单, 个是配置前置分隔符的属性,一个是配置后置分隔符的属性。在MySQL 中,两个分隔符都是“、”,在 SQL Se 中分别为“[”和 “] SQL 中的 property配置写法如下。
<context id=”Mysql” targetRuntime=”MyBatis3Simple” defaultModelType=” flat ” >
<property name=” autoDelimitKeywords” value=” true ” />
<property name beginningDelimiter value /〉
<property name endingDelimiter value /〉
</context>
除了上面 个和分隔符相关的属性外,还有以下 个属性。
• javaFileEncoding
• javaFormatter
• xmlFormatter
属性 javaFileEncoding 设置要使用的 Java 文件的编码,例如 GBK UTF 。默认使
用当前运行环境的编码。后面两个 Formatter 相关的属性并不常用 这里不做详细介绍。
1.2、plugin 标签
plug in 标签可以配置 个或者多个,个数不受限制。
plugi 口标签用来定义一个插件,用于扩展或修改通过 MBG 生成的代码 。该插件将按在
配置中配置的顺序执行。 MBG 插件使用的情况并不多,如果对开发插件有兴趣,可以参考 MBG
文档,或者参考下面要介绍的缓存插件的例子,这个例子包含在 BG 插件中
下面要介绍的缓存插件的全限定名称为 org .m ybatis.generator.plugin s.
CachePlugi
这个插件可以在生成的 SQL XML 映射文件中增加 cache 标签。只有
targetRuntime MyBatis3 时,该插件才有效。
该插件接受下列可选属性。
• cache eviction
• cache flushinterval
• cache readOnly
• cache size
• cache type
配置方法如下。
<plugin type=” org.mybatis.generator.plugins .CachePlugin” >
<property name=” cache eviction” value=” LRU” />
<property name=” cache size ” value=” l 024 ” />
</plug n>
增加这个配置后 生成的 Mapper nl 文件中会增加如下的缓存相关配置。
<cache eviction=” LRU” size=”1 024 ” >
节主要介绍如何配置插件 ,和缓存相关的内容会在第 章中介绍。 MBG 默认包含的插件中,除了缓存插件外,还有序列化插件、 RowBound 插件、 ToString 插件等,关于这些插件的介绍可以查看 MBG 文档。查看英文文档: ://www. ybatis.org/ generator reference plugins.html 。查看中文文档 http: //mbg.cndocs.tk/reference plugins html
1.3、commentGenerator 标签
该标签用来配置如何生成注释信息,最多可以配置
该标签有 个可~属性 type ,可以指定用户的实现类,该类需要实现 org.mybatis.
generator api.CommentGenerator 接口,而且必有一个默认空的构造方法。 type 属性
收默认的特殊值 DEFAULT ,使用默认的实现类 org .mybati s.generator internal
DefaultCommentGe nerator
默认的实现类中提供了 个可选属性,需要通过 property 属性进行配置。
sup:pressAllComments :阻止生成注释 ,默认为 false
suppressDate 阻止生成的注释包含时间戳,默认为 false
addRemarkComments :注释是否添加数据库表的备注信息 ,默认为 false
般情况下,由于 MBG 生成的注释信息没有任何价值 ,而且有时间戳的情况下每次生成
的注释都不 样,使用版本控制的时候每次都会提交,因而 般情况下都会屏蔽注释信息,可
以如下配置。
<commentGenerator>
<property name=” suppress Date ” value=” true ” />
<property name=” addRemarkComments” value=” true ” />
</commentGenerator>
在数据库表宇段包含备注信息的情况下生成的 Java 对象代码的注释如下。
/**
- Database Column Remarks :
- 角色名
- Th 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 ,代码如下。
食/
public class MyComrnentGe erator extends DefaultComrnentGenerator {
/**
女由于默认实现类中的可配参数都没有提供给子类可以访问的方法,这里妥定义一边
食/
private boolean suppressAllComrnents;
/*?女
女同上
/
private boolean addRemarkComrnents ;
/*食
女设直用户画己直的参数
井/
public void addConfigurationProperties(Propert s properties) {
//允调用父类方法保证父类方法可以正常使用
/会*
super.addConfigurationProperties(properties);
//获取 suppressAllComrnents 参数值
suppressAllComrnents = isTrue(properties . getProperty(
PropertyRegistry . CO~ NT GENERATOR SUPPRESS ALL co~ NTS));
//获取 addRemarkComrnents 参数值
addRemarkComrnents = isTrue(properties.getProperty(
PropertyReg stry.COMMENT GENERATOR ADD REMARK COMMENTS ));
女给字段添加注释信息
女/
public void addFieldComrnent(Field field,
IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
//如果阻止生成所有注释,直接返回
if (suppressAllComrnents) {
return;
//文档注释开始
field addJavaDocL ne /*女
宣言 Mybatis 代码主成器 I 99
//获取数据库字段的备注信息
String remarks= introspectedColumn . getRemarks() ;
//根据参数和备注信息判断是否添加备注信息
if (addRemarkComments && Str ngUt ty. str ngHasVa lue(remark )) (
String[] remarkLines =remarks .split(
System . getProperty (” line . separator” )) ;
for (String remarkLine : remarkLines) {
field . addJavaDocLine (” * ” + remarkLine) ;
// 由于 Java 对象名和数据库字段名 可能不一样,注释中保留数据库字段名
field.addJavaDocL ne (” * ”+ introspectedColumn . getActualColurnnN ne ());
field . addJavaDocLine (”/ ” );
有了自己的注释生成器后 ,可以在配置文件中如下进行配置
<commentGenerator type tk .mybat s.generator.MyCommentGenerator
<property name=” suppress Date ” value=” true ” />
<property name=” addRemarkComments” value=” true ” />
重写注释后 ,生成代码中的注释如下。
/ **
*角色名
- role name
*/
private String roleName ;
大家可 参考上面的 子编写自己 注释生成器
MBG 是通过 JDBC Da tabaseMetaDa ta 方式来获取数据库表和字段的备注信息的,
大多数的 JDBC 驱动并不支持,常用数据库中 MySQL 支持, SQLSe er 不支持 Oracle
配直后可以支持,配直方式见下一节关于 jdbcConnection 标签的介绍
1.4、jdbcConnection 标签
jdbcConnection 指定 MBG 要连接的数据库信息,该标签必边,并且只能有
配置该标签需要注意,如果 JDBC 驱动不在 classpath 下,就要通过 classPathEntr
签引入 jar 包,这里推荐将 jar 放到 classpath 下,或者参考前面 classPathEntry 配置 JDBC
驱动的方法。
该标签有两个必边属性。
driverClass 访问数据库的 JDBC 驱动程序的完全限定类名
connection URL 访问数据库的 JDBC 连接 URLo
该标签还有两个可选属性。
user!d :访问数据库的用户 ID
password 访问数据库的密码。
此外,该标签还可以接受多个 property 子标 ,这里配置的 property 属性都会添加到
JDBC 驱动的属性中(使用 proprety 标签的 name 属性反射赋值)
这个标签配置起来非常容易,基本配置如下。
<jdbcConnection driverClass=” com.mysql.jdbc .Driver”
connectionURL=” jdbc :mysql://localhost:3306/mybati s ”
user Id=” root”
password=””>
在上 节提醒过, Oracle 可以通过特殊配置使 JDBC 方式能够获取到列的注释信息,配置
方式如下。
<jdbcConnection driverClass=” oracle . jdbc.driver . OracleDriver”
connection URL=” j dbc:oracle:thin:@//localhost:l521/orcl”
user Id=” mybati s ”
password=” mybatis” >
<property name=” remarksReporting” value=” true ” />
这种方式就是通过 property 标签配置了 Oracle remarksReporting 属性,使得 JDBC
方式可以获取注释信息。
1.5、javaTypeRes lver 标签
该标签的配置用来指定 JDBC 类型和 Java 类型如何转换,最多可以配置
该标签提供了 个可选的属性 type 。另外,和 commentGenerator 类似,该标签提供
了默认的实现 DEFAULT ,一般情况下使用默认即可,需要特殊处理的情况可以通过其他标签配
置来解决,不建议修改该属性
该属性还有 个可以配置的 property 标签,可以配置的属性为 forceBigDecimals,
该属性可以控制是否强制将 DECIMAL NUMERIC 类型的 JDBC 字段转换为 Java 类型的
java.math BigDecimal ,默认值为 false ,一般不需要配置。
默认情况下的转换规则如下
• 如果精度 或者长度 18 ,就使用 ja va math BigDecimal
. 如果精度 并且 10 <=长度< 18 ,就使用 java.la g.Long
• 如果精度 并且 <=长度<= ,就使用 ava.lang.Integer o
. 如果精度 并且长度 ,就使用〕 ava.lang Short
如果将 forceBigDecimals 设置为 true ,那么一定会使用 ava .math . BigDecimal
类型
java ypeReso ver 标签配置如下。
<property name=”f orceBigDecimal s ” va lue= ” false ” / >
</] avaTypeResolver>
5.1.6 javaM delGenerat。z 标签
该标签用来控制生成的 体类,根据 context 标签中配置的 defaultModelType 属性值
的不同,一 表可能会对应生成 个不同的实体类。一个表对应多个类时使用并不方便,所以前
面推荐使 flat ,保证 个表对应 个实体类。该标签必须配置 个,并且最多配置 个。
该标签只有两个必选属性
target Package 生成实体类存放的包名。一般就是放在该包下,实际还会受到其他
配置的影响
targetProject :指定目标项目路径,可以使用相对路径或绝对路径
该标签还支持以下几个 property 子标签属性。
co nstru ctorBased :该属性只对 MyBatis3 有效,如果为 true 就会使用构造方法
,如果为 false 就会使用 setter 方式。默认为 falseo
ableSubPackages :如果为 true, MBG 会根据 catalog schema 来生成子
包。如果为 false 就会直接使用 target Package 属性。默认为 false
immutable :用来配置实体类属性是否可变 如果设置为 true ,那么 constructorBased
I 02 I MyBatis 从入门到
不管设置成什么,都会使用构造方法入参,并且不会生成 setter 方法 如果为 fals e,
实体类属性就可 以改变。默认为 fal se
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 配置 例如下
<javaMode lGenerator targetPackage=”test.model ”
targetProject=”src\ma in\java” >
<property ame =” enableSubPackages value =” false ” />
<property name tr mStrings value false ” />
</javaMode lGenerator>
1.7、sqlMapGenera tor 标签
该标签用于配置 SQL 映射生成器 Mapper xml 文件)的属性,该标签可选,最多配置
如果 targetRuntime 设置为 MyBatis3 ,则只有当 avaClientGenerator 配置需要 XML
时,该标签才必须配置 如果没有配置 avaClientGenerator ,则使用以下规则
如果指定 了一个 sqlMapGenerato ,那 MBG 将只生成 泊位的 SQL 射文件和实
体类。
如果没有指定 sqlMapGenerator ,那么 MBG 将只生成实体类
该标签只有两个必选属性
target Pa ckage 生成 SQL 映射文件( XML 文件)存放的包名 。一般就是放在该包
下,实际还会受到其他配
targetProject 指定目标项目路径,可以使用相对路径或绝对路径。
该标签还有一个可选的 property 子标签属性 enableSubPackages ,如果为 true
MBG 会根据 catalog schema 来生成子包。如果为 false 就会直接用 target Package
属性,默认为 false
sqlMapGenerator 配置示例如下
<sqlMapGenerator targetPackage=” test.xml”
targetProject=” E: \MyProject\src \ma in\resources” > <property name=” enableSubPackages” value=” false ”/>
1.8、javaClientGenerat。 标签
该标签用于配置 Java 客户端生成器( Mapper 接口)的属性 该标签可选 最多配置
如果不配置该标签,就不会生成 Mapp 接口。
该标签有以下 个必选属性
type 用于选择客户端代码( Mapper 接口)生成器,用户可以自定义实现 需要继承
org mybatis generator codegen.AbstractJavaClientGenerator ,必
须有 个默认空的构造方法。该属性提供了以下预设的代码生成器,首先根据 context
targetRuntime 分成两类(不考虑 iBATIS )。
);> MyBatis3
./ ANNOTATEDMAPPER :基于注解的 Mapper 接口 不会有对应的 XML 映射文件。
./ MIXEDMAPPER: XML 和注解的混合形式,上面这种情况中的 SQL Provider
解方法会被 XML 方式替代。
./ XMLMAPPER :所有的方法都在 XML 中, 接口调用依赖 XML 文件。
);> MyBatis3Simple
./ ANNOTATEDMAPPER:基于注解的 Mapper 接口 不会有对应的 XML 映射文件。
./ XMLMAPPER :所有的方法都在 XML 中, 接口调用依赖 XML 文件。
target Package 生成 Mapper 接口存放的包名。一般就是放在该包下 实际还会受
到其他配置的影响
targetProject :指定目标项目路径,可以使用相对路径或绝对路径。
该标签还有一个可选属性 imple mentationPackage ,如果指定了该属性, Mapper 接口
的实现类就会生成在这个属性指定的包中。
该标签还支持几个 property 子标签,由于这些属性不常用,因此不做介绍。
javaClientGenerator 标签中的 type 属性非常重要,此处提供 些选择的建议。
XMLMAPPER :推荐使用,将接口和 XML 完全分离,容易维护,接口中不出现 SQL
句,只在 XML 中配置 SQL ,修改 SQL 时不需要重新编译。
ANNOTATEDMAPPER :不推荐使用,纯注解方式的好处是, SQL 都在 Java 代码中,基
本上只在 处写代码,看着方便。但是实际上维护不容易,写 SQL 过程中需要大量字
符串拼接操作,复杂情况需要大量的 Java 判断,代码很乱,不容易维护。
MIXEDMAPPER :不推荐使用,这种情况下注解和 XML 混合使用会很乱,不利于维护
javaClientGenerator 标签配置示例如下。
<javaCl entGenerator type=”泪征品也PPER targetPackage=” test.da。”
targetProject=”src\main\java ”/>
1.9、table 标签
table 是最重要的一个标签,该标签用于配置需要通过内省数据库的表,只有在 table
配置过的表,才能经过上述其他配置生成最终的代码,该标签至少要配置 个,可以配置多个
table 标签有 个必选属性 tableName ,该属性指定要生成的表名,可以使用 SQL 通配
符匹配多个表。
例如要生成全部的表,可以如下配置。
selectByExampleQueryid: DBA 踪工具中会用到 ,具体请参考详细文档。
model Type :和 context defaultModelType 含义 样,这里可以针对表进行
配置,配置会覆盖 context defaultModelType 配置。
escapeWildcards 表示查询列是否对 schema 和表名中的 SQL 通配符 (和引进
行转义 对于某些驱动,当 schema 表名中包含 SQL 通配符时,转义是必须的。有
些驱动则需要将下画线进行转义,例如 MY TABLE 。默认值是 false
delimitidentifiers 是否给标识符增加分隔符。默认为 false 。当 catalog
schema tableName 中包含空白时,默认为 true
del.imi tAllColumns :是否对所有列添加分隔符。默认为 fa lse
ble 标签包含多个可用的 property 子标签,可选属性如下。
constructorBased :和 avaModelGenerator 中的属性含义 样。
ignoreQualifiersAtRuntime 生成的 SQL 中的表名将不会包含 schema
catalog 前缀。
immutable :和 javaModelGenerator 中的属性含义 样。
modelOnly :用于配置是否只生成实体类。如果设置为 true ,就不会有 Mapper 接口,
同时还会覆盖属性中的 enableXXX 方法,井且不会生成任何 CRUD 方法。如果配置
sqlMapGenerator ,并且 modelOnly true ,那么 XML 映射文件中只有实体
对象的映射标签 CresultMap )。
rootClass :和〕 avaModelGenerator 中的属性含义 样。
root Interface :和 javaCl entGenerator 中的属性含义 样。
runtimeCatalog 运行时的 catalog ,当生成表和运行环境表的 catalog
时,可以使用该属性进行配置
runtime Schema 运行时的 schema ,当生成表和运行环境表的 schema 样时,
可以使用该属性进行配置。
• runtimeTableName :运行时的 tabl eName 当生成表和运行环境表的 tableName
样时,可以使用该属性进行配置。
• selectAllOrderByClause :该属性值会追加到 selectAl 方法后的 SQL 中,
接与 order by 拼接后添加到 SQL 末尾
• useActualColumnNames :如果设置为 true ,那么 MBG 会使用从数据库元数据获
取的列名作为生成的实体对象的属性。如果为 false (默认值为 false), MGB
尝试将返回的名称转换为驼峰形式。在这两种情况下 ,可以通过 columnOverride
selectByExampleQueryid: DBA 踪工具中会用到 ,具体请参考详细文档。
model Type :和 context defaultModelType 含义 样,这里可以针对表进行
配置,配置会覆盖 context defaultModelType 配置。
escapeWildcards 表示查询列是否对 schema 和表名中的 SQL 通配符 (和引进
行转义 对于某些驱动,当 schema 表名中包含 SQL 通配符时,转义是必须的。有
些驱动则需要将下画线进行转义,例如 MY TABLE 。默认值是 false
delimitidentifiers 是否给标识符增加分隔符。默认为 false 。当 catalog
schema tableName 中包含空白时,默认为 true
del.imi tAllColumns :是否对所有列添加分隔符。默认为 fa lse
ble 标签包含多个可用的 property 子标签,可选属性如下。
constructorBased :和 avaModelGenerator 中的属性含义 样。
ignoreQualifiersAtRuntime 生成的 SQL 中的表名将不会包含 schema
catalog 前缀。
immutable :和 javaModelGenerator 中的属性含义 样。
modelOnly :用于配置是否只生成实体类。如果设置为 true ,就不会有 Mapper 接口,
同时还会覆盖属性中的 enableXXX 方法,井且不会生成任何 CRUD 方法。如果配置
sqlMapGenerator ,并且 modelOnly true ,那么 XML 映射文件中只有实体
对象的映射标签 CresultMap )。
rootClass :和〕 avaModelGenerator 中的属性含义 样。
root Interface :和 javaCl entGenerator 中的属性含义 样。
runtimeCatalog 运行时的 catalog ,当生成表和运行环境表的 catalog
时,可以使用该属性进行配置
runtime Schema 运行时的 schema ,当生成表和运行环境表的 schema 样时,
可以使用该属性进行配置。
• runtimeTableName :运行时的 tabl eName 当生成表和运行环境表的 tableName
样时,可以使用该属性进行配置。
• selectAllOrderByClause :该属性值会追加到 selectAl 方法后的 SQL 中,
接与 order by 拼接后添加到 SQL 末尾
• useActualColumnNames :如果设置为 true ,那么 MBG 会使用从数据库元数据获
取的列名作为生成的实体对象的属性。如果为 false (默认值为 false), MGB
尝试将返回的名称转换为驼峰形式。在这两种情况下 ,可以通过 columnOverride
gnore umn 标签
该标签可以用来屏蔽不需要生成的列 ,该标签可边,可以配置多个
该标签有 个必选属性 column ,表示要忽略的列名。
该标签还有 个可选属性 delim tedColumnName ,标识匹配列名的时候是否区分大小
如果为 true 则区分,默认值为 false ,表示不区分大小写
2、一个配置参考示例
为了方便学习 MBG ,此处针对前面章节中提到的项目创建一个 的配置供大家参考。在项目 src main/resources 中创建 generator 目录,在该目录下创建
generatorConfig.xml 文件,文件内容如下。
<?xml version= ” 1. 0” encoding= ” UTF-8 ” ?>
<!DOCTYPE generatorConfiguration
PUBLIC ”-/ /mybatis . org/ /DTD MyBat 工 S Generator Configuration 1. 0/ /EN”
” http: //<generatorConfiguration>
<context id=”MySqlContext” targetRuntime=”MyBatis3Simple”
defaultModelType=” flat ” >
<property name beg nningDelimiter value ,, /:〉
<property name endingDelimiter value /〉
<commentGenerator>
<property name=” suppressDate” value=” true ” />
<property name=” addRemarkComments” value=” true ” />
</commentGenerator>
<jdbcConnect on driverClass=” com.mysql . jdbc . Driver”
connection URL=” jdbc :mysql://localhost:3306/mybatis”
user Id=” root ”
password=””>
</jdbcConnection>
<javaModelGenerator targetPackage=” test .model ”
targetProject=” src\main\java ” >
<property name=” trimStrings” value=” true ” />
</javaModelGenerator>
<sqlMapGenerator targetPackage=” test.xml”
targetProject=”src\main\resources” />
<javaClientGenerator type=” XMLMAPPER" targetPackage test da 。”
targetProject=”src\main\java ” />
<table tableName
<generatedKey column=” id” sqlStatement=” MySql” /:>
</ table>
</context>
</generatorCon f 工 gurat on> . org/dtd/mybatis-generator-config 1 O.dtd” >
有关该配置有 点重要说明。
I . context 属性 targetRunt me 设置为 MyBatis3Simple 主要是为了避免生成与
xampl 相关的代码和方法 如果需要 mple 相关的代码 也可以设置为 MyBatis3
- context 属性 defa ltModelType 设置为 flat ,目的是使每个表只生成 个实体
当没有复杂 类继承时, 使用起来更方便。
因为此处使用的数据库为 MySQL 所以前后分隔符都设置为“
注释生成器 commentGenerator 中配置了生成数据库的注释信息,并且禁止在注释中
生成日期。
- jdbcConnection 简单地配置了要连接的数据源信息。
- javaModelGenerator 配置生成的包名为 test .model ,这个包名可 以根据自己代
码的规范进行修改, target Project 设置在 src\main\java 中。 - sqlMapGe era tor 配置生成的 Mapper.xml 文件的位置,这 argetProject
置为 rc\ main\resources ,没有放在 src\main\java 中。 - j avaClientGenerator 配置生成 Mapper 接口的位置,这里采用的 XMLMAPPER
型,接口和 XML 完全分离 - 最后的 table 使用通配符气”匹配数据库中所有的表,所有表都有主键自增的 id
段, sqlStatement 针对当前数据库配置 MySQL
熟悉了 5. 节中的配置后,可以根据自己的需要尝试修改这里的配置。有了配置文件后,
下一节就可 以开始学习如何执行 MBG 生成我们需要的类了。
5.3 运行 MyBatis Generator
MBG 提供了很多种运行方式,常用的有以下几种。
. 使用 Java 编写代码运行
• 从命令提示符运行
• 使用 Maven Plugin 运行
使用 Ecl ip se 插件运行
这几种方式都有各自的优点和缺点,大家在看完下面的详细介绍后,可以根据自己的情况
选择合适的方式,下面按顺序详细介绍这几种运行方式。
本章小结
在本章中 ,我们对 MBG 进行了全面的介绍,针对不同的情况提供了多样的示例。对 MBG
了解越多,就越能在使用 的时候减少人工操作,节省大量的时间,从枯燥的基础方法中脱离出
来,将更多的精力用于复杂或高效的编码中。