MyBatis Generator详解
Posted CrystalS5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis Generator详解相关的知识,希望对你有一定的参考价值。
MyBatis Generator中文文档
MyBatis Generator中文文档地址:
本文中所有节点的链接都是对应的中文文档地址,可以点击查看详细信息。
下载本文档的PDF版本
注:本文后面提到的MBG全部指代MyBatis Generator。
运行MyBatis Generator
有4种运行MBG的方法,具体请看文档 运行 MyBatis Generator
MBG下载地址:http://repo1.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/
XML配置详解
在MBG中,最主要也最重要的就是XML配置文件,因此本篇文章主要的内容就是XML配置。
这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照。
1. 配置文件头
<?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">
使用最新版的MBG需要使用上面的xml头,配置文件必须包含上面的DOCTYPE
。
2.
根节点<generatorConfiguration>
generatorConfiguration
节点没有任何属性,直接写节点即可,如下:
<generatorConfiguration>
<!-- 具体配置内容 -->
</generatorConfiguration>
3. <generatorConfiguration>
子元素
从这段开始,就是配置的主要内容,这些配置都是generatorConfiguration
元素的子元素。
包含以下子元素(有严格的顺序):
-
<properties>
(0个或1个) -
<classPathEntry>
(0个或多个) -
<context>
(1个或多个)
3.1 <properties>
元素
这个元素用来指定外部的属性元素,不是必须的元素。
元素用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用 ${property}
这种形式的引用,通过这种方式引用属性文件中的属性值。
对于后面需要配置的**jdbc信息**和targetProject
属性会很有用。
这个属性可以通过resource
或者url
来指定属性文件的位置,这两个属性只能使用其中一个来指定,同时出现会报错。
-
resource
:指定**classpath**下的属性文件,使用类似com/myproject/generatorConfig.properties
这样的属性值。 -
url
:可以指定文件系统上的特定位置,例如file:///C:/myfolder/generatorConfig.properties
3.2 <classPathEntry>
元素
这个元素可以0或多个,不受限制。
最常见的用法是通过这个属性指定驱动的路径,例如:
<classPathEntry location="E:\mysql\mysql-connector-java-5.1.29.jar"/>
重点提醒:本文之前在这里有误导,特别强调。
注意,classPathEntry只在下面这两种情况下才有效:
- 当加载 JDBC 驱动内省数据库时
- 当加载根类中的 JavaModelGenerator 检查重写的方法时
3.3 <context>
元素
在MBG的配置中,至少需要有一个<context>
元素。
<context>
元素用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行MBG的时候还可以指定要运行的<context>
。
该元素只有一个**必选属性**id
,用来唯一确定一个<context>
元素,该id
属性可以在运行MBG的使用。
此外还有几个**可选属性**:
-
defaultModelType
:**这个属性很重要**,这个属性定义了MBG如何生成**实体类**。
这个属性有以下可选值:conditional
:*这是默认值*,这个模型和下面的hierarchical
类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。flat
:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。**这种模型最简单,推荐使用。**hierarchical
:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。
-
targetRuntime
:此属性用于指定生成的代码的运行时环境。该属性支持以下可选值:MyBatis3
:*这是默认值*MyBatis3Simple
Ibatis2Java2
Ibatis2Java5
一般情况下使用默认值即可,有关这些值的具体作用以及区别请查看中文文档的详细内容。
-
introspectedColumnImpl
:该参数可以指定扩展org.mybatis.generator.api.IntrospectedColumn
该类的实现类。该属性的作用可以查看扩展MyBatis Generator。
一般情况下,我们使用如下的配置即可:
<context id="Mysql" defaultModelType="flat">
如果你希望不生成和Example
查询有关的内容,那么可以按照如下进行配置:
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
使用MyBatis3Simple
可以避免在后面的<table>
中逐个进行配置(后面会提到)。
MBG配置中的其他几个元素,基本上都是<context>
的子元素,这些子元素(有严格的配置顺序)包括:
<property>
(0个或多个)<plugin>
(0个或多个)<commentGenerator>
(0个或1个)<jdbcConnection>
(1个)<javaTypeResolver>
(0个或1个)<javaModelGenerator>
(1个)<sqlMapGenerator>
(0个或1个)<javaClientGenerator>
(0个或1个)<table>
(1个或多个)
其中<property>
属性比较特殊,后面讲解的时候都会和父元素一起进行讲解。在讲解<property>
属性前,我们先看看**什么是分隔符?**。
这里通过一个例子说明。假设在Mysql数据库中有一个表名为user
info
,你没有看错,中间是一个空格,这种情况下如果写出select
* from user info
这样的语句,肯定是要报错的,在Mysql中的时候我们一般会写成如下的样子:
select * from `user info`
这里的使用的**反单引号(`)**就是**分隔符**,**分隔符**可以用于**表名**或者**列名**。
下面继续看<property>
支持的属性:
autoDelimitKeywords
beginningDelimiter
endingDelimiter
javaFileEncoding
javaFormatter
xmlFormatter
由于这些属性比较重要,这里一一讲解。
首先是autoDelimitKeywords
,当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加**分隔符**。
然后这里继续上面的例子来讲beginningDelimiter
和endingDelimiter
属性。
由于beginningDelimiter
和endingDelimiter
的默认值为双引号("
),在Mysql中不能这么写,所以还要将这两个默认值改为**反单引号(`)**,配置如下:
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
属性javaFileEncoding
设置要使用的Java文件的编码,默认使用当前平台的编码,只有当生产的编码需要特殊指定时才需要使用,一般用不到。
最后两个javaFormatter
和xmlFormatter
属性**可能会**很有用,如果你想使用模板来定制生成的java文件和xml文件的样式,你可以通过指定这两个属性的值来实现。
接下来分节对其他的子元素逐个进行介绍。
3.3.1 <plugin>
元素
该元素可以配置0个或者多个,不受限制。
<plugin>
元素用来定义一个插件。插件用于扩展或修改通过MyBatis
Generator (MBG)代码生成器生成的代码。
插件将按在配置中配置的顺序执行。
3.3.2 <commentGenerator>
元素
该元素最多可以配置1个。
这个元素非常有用,相信很多人都有过这样的需求,就是希望MBG生成的代码中可以包含**注释信息**,具体就是生成表或字段的备注信息。
使用这个元素就能很简单的实现我们想要的功能。这里先介绍该元素,介绍完后会举例如何扩展实现该功能。
该元素有一个可选属性type
,可以指定用户的实现类,该类需要实现org.mybatis.generator.api.CommentGenerator
接口。而且必有一个默认的构造方法。这个属性接收默认的特殊值DEFAULT
,会使用默认的实现类org.mybatis.generator.internal.DefaultCommentGenerator
。
默认的实现类中提供了两个可选属性,需要通过<property>
属性进行配置。
suppressAllComments
:**阻止**生成注释,默认为false
suppressDate
:**阻止**生成的注释包含时间戳,默认为false
以上是关于MyBatis Generator详解的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis代码生成器Mybatis-Generator使用详解
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解