MyBatis Generator 详解

您所在的位置:网站首页 longvarchar长度 MyBatis Generator 详解

MyBatis Generator 详解

2023-02-22 12:10| 来源: 网络整理| 查看: 265

​​MyBatis Generator中文文档​​

MyBatis Generator中文文档地址:

​​http://mbg.cndocs.ml/​​

该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中文版的文档的也会有一定的障碍,所以本章根据该中文文档以及实际应用,使用通俗的语言来讲解详细的配置。

本文中所有节点的链接都是对应的中文文档地址,可以点击查看详细信息。

注:本文后面提到的MBG全部指代MyBatis Generator。

​​MyBatis Generator 1.3.4 扩展,可以设置 Mapper(Dao)后缀​​

​​运行MyBatis Generator​​

有4种运行MBG的方法,具体请看文档 ​​运行 MyBatis Generator​​

MBG下载地址:​​http://repo1.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/​​

​​XML配置详解​​

在MBG中,最主要也最重要的就是XML配置文件,因此本篇文章主要的内容就是XML配置。

这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照。

1. 配置文件头

使用最新版的MBG需要使用上面的xml头,配置文件必须包含上面的​​DOCTYPE​​。

2. 根节点​​​​

​​generatorConfiguration​​节点没有任何属性,直接写节点即可,如下:

3. 子元素

从这段开始,就是配置的主要内容,这些配置都是​​generatorConfiguration​​元素的子元素。

包含以下子元素(有严格的顺序):

​​​​ (0个或1个)​​​​ (0个或多个)​​​​ (1个或多个)

3.1 ​​​​​​ 元素

这个元素用来指定外部的属性元素,不是必须的元素。

元素用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用 ​​${property}​​这种形式的引用,通过这种方式引用属性文件中的属性值。 对于后面需要配置的**jdbc信息**和​​targetProject​​属性会很有用。这个属性可以通过​​resource​​或者​​url​​来指定属性文件的位置,这两个属性只能使用其中一个来指定,同时出现会报错。

​​resource​​​:指定**classpath**下的属性文件,使用类似​​com/myproject/generatorConfig.properties​​这样的属性值。​​url​​​:可以指定文件系统上的特定位置,例如​​file:///C:/myfolder/generatorConfig.properties​​

3.2 ​​​​​​ 元素

这个元素可以0或多个,不受限制。

最常见的用法是通过这个属性指定驱动的路径,例如:

重点提醒:本文之前在这里有误导,特别强调。

 

注意,classPathEntry只在下面这两种情况下才有效:

当加载 JDBC 驱动内省数据库时当加载根类中的 JavaModelGenerator 检查重写的方法时

因此,如果你需要加载其他用途的jar包,classPathEntry起不到作用,不能这么写,解决的办法就是将你用的jar包添加到类路径中,在Eclipse等IDE中运行的时候,添加jar包比较容易。当从命令行执行的时候,需要用java -cp xx.jar,xx2.jar xxxMainClass这种方式在-cp后面指定来使用(注意-jar会导致-cp无效)。

3.3 ​​​​​​ 元素在MBG的配置中,至少需要有一个​​​​元素。​​​​元素用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行MBG的时候还可以指定要运行的​​​​。该元素只有一个**必选属性**​​id​​,用来唯一确定一个​​​​​​元素,该​​id​​属性可以在运行MBG的使用。

此外还有几个**可选属性**:

​​defaultModelType​​​:**这个属性很重要**,这个属性定义了MBG如何生成**实体类**。这个属性有以下可选值:​​conditional​​​:*这是默认值*,这个模型和下面的​​hierarchical​​类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。​​flat​​:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。**这种模型最简单,推荐使用。**​​hierarchical​​:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。​​targetRuntime​​:此属性用于指定生成的代码的运行时环境。该属性支持以下可选值:​​MyBatis3​​:*这是默认值*​​MyBatis3Simple​​​​Ibatis2Java2​​​​Ibatis2Java5​​ 一般情况下使用默认值即可,有关这些值的具体作用以及区别请查看中文文档的详细内容。​​introspectedColumnImpl​​​:该参数可以指定扩展​​org.mybatis.generator.api.IntrospectedColumn​​​该类的实现类。该属性的作用可以查看​​扩展MyBatis Generator​​。

一般情况下,我们使用如下的配置即可:

如果你希望不生成和​​Example​​查询有关的内容,那么可以按照如下进行配置:

使用​​MyBatis3Simple​​可以避免在后面的​​​​中逐个进行配置(后面会提到)。MBG配置中的其他几个元素,基本上都是​​​​的子元素,这些子元素(有严格的配置顺序)包括:

​​​​ (0个或多个)​​​​ (0个或多个)​​​​ (0个或1个)​​​​ (1个)​​​​ (0个或1个)​​​​ (1个)​​​​ (0个或1个)​​​​ (0个或1个)​​​​ (1个或多个)

其中​​​​属性比较特殊,后面讲解的时候都会和父元素一起进行讲解。在讲解​​​​属性前,我们先看看**什么是分隔符?**。这里通过一个例子说明。假设在Mysql数据库中有一个表名为​​user info​​,你没有看错,中间是一个空格,这种情况下如果写出​​select * from user info​​这样的语句,肯定是要报错的,在Mysql中的时候我们一般会写成如下的样子:

select * from `user info`

这里的使用的**反单引号(`)**就是**分隔符**,**分隔符**可以用于**表名**或者**列名**。

下面继续看​​​​支持的属性:

​​autoDelimitKeywords​​​​beginningDelimiter​​​​endingDelimiter​​​​javaFileEncoding​​​​javaFormatter​​​​xmlFormatter​​

由于这些属性比较重要,这里一一讲解。

首先是​​autoDelimitKeywords​​,当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加**分隔符**。然后这里继续上面的例子来讲​​beginningDelimiter​​和​​​endingDelimiter​​​属性。

由于​​​beginningDelimiter​​​和​​endingDelimiter​​​的默认值为双引号(​​"​​),在Mysql中不能这么写,所以还要将这两个默认值改为**反单引号(`)**,配置如下:

属性​​javaFileEncoding​​设置要使用的Java文件的编码,默认使用当前平台的编码,只有当生产的编码需要特殊指定时才需要使用,一般用不到。最后两个​​javaFormatter​​和​​xmlFormatter​​属性**可能会**很有用,如果你想使用模板来定制生成的java文件和xml文件的样式,你可以通过指定这两个属性的值来实现。

接下来分节对其他的子元素逐个进行介绍。

3.3.1 ​​​​​​ 元素

该元素可以配置0个或者多个,不受限制。

​​​​元素用来定义一个插件。插件用于扩展或修改通过MyBatis Generator (MBG)代码生成器生成的代码。

插件将按在配置中配置的顺序执行。

有关插件的详细信息可以参考​​开发插件​​​和​​提供的插件​​了解更多。

3.3.2 ​​​​​​ 元素

该元素最多可以配置1个。

这个元素非常有用,相信很多人都有过这样的需求,就是希望MBG生成的代码中可以包含**注释信息**,具体就是生成表或字段的备注信息。

使用这个元素就能很简单的实现我们想要的功能。这里先介绍该元素,介绍完后会举例如何扩展实现该功能。

该元素有一个可选属性​​type​​,可以指定用户的实现类,该类需要实现​​​org.mybatis.generator.api.CommentGenerator​​​接口。而且必有一个默认的构造方法。这个属性接收默认的特殊值​​DEFAULT​​​,会使用默认的实现类​​org.mybatis.generator.internal.DefaultCommentGenerator​​。默认的实现类中提供了两个可选属性,需要通过​​​​属性进行配置。

​​suppressAllComments​​​:**阻止**生成注释,默认为​​false​​​​suppressDate​​​:**阻止**生成的注释包含时间戳,默认为​​false​​

一般情况下由于MBG生成的注释信息没有任何价值,而且有时间戳的情况下每次生成的注释都不一样,使用**版本控制**的时候每次都会提交,因而一般情况下我们都会屏蔽注释信息,可以如下配置:

接下来我们简单举例实现生成包含表字段注释信息的注释

因为系统提供了一个默认的实现类,所以对我们来说,自己实现一个会很容易,最简单的方法就是复制默认实现类代码到一个新的文件中,修改类名如​​MyCommentGenerator​​,在你自己的实现类中,你可以选择是否继续支持上面的两个属性,你还可以增加对其他属性的支持。

我们通过下面一个方法的修改来了解,其他几个方法请自行修改(写本章的时候我也没有完全实现该类,所以不提供完整源码了):

@Overridepublic void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (introspectedColumn.getRemarks() != null && !introspectedColumn.getRemarks().equals("")) { field.addJavaDocLine("/**"); field.addJavaDocLine(" * " + introspectedColumn.getRemarks()); addJavadocTag(field, false); field.addJavaDocLine(" */"); }}

这个方法是给字段添加注释信息的,其中​​IntrospectedColumn​​包含了字段的完整信息,通过​​​getRemarks​​​方法可以获取字段的注释信息。上面这个方法修改起来还是很容易的。除了字段的注释外还有​​Getter​​​和​​Setter​​,以及类的注释。此外还有生成XML的注释,大家可以根据默认的实现进行修改。

完成我们自己的实现类后,我们还需要做如下配置:

3.3.3 ​​​​​​ 元素​​​​用于指定数据库连接信息,该元素必选,并且只能有一个。配置该元素只需要注意如果JDBC驱动不在**classpath**下,就需要通过​​​​元素引入jar包,这里**推荐**将jar包放到**classpath**下。

该元素有两个必选属性:

​​driverClass​​:访问数据库的JDBC驱动程序的完全限定类名​​connectionURL​​:访问数据库的JDBC连接URL

该元素还有两个可选属性:

​​userId​​:访问数据库的用户ID​​password​​:访问数据库的密码

此外该元素还可以接受多个​​​​子元素,这里配置的​​​​属性都会添加到JDBC驱动的属性中。

这个元素配置起来最容易,这里举个简单例子:

3.3.4 ​​​​​​ 元素

该元素最多可以配置一个。

这个元素的配置用来指定JDBC类型和Java类型如何转换。

该元素提供了一个可选的属性​​type​​,和​​​​​​比较类型,提供了默认的实现​​DEFAULT​​,一般情况下使用默认即可,需要特殊处理的情况可以通过其他元素配置来解决,不建议修改该属性。该属性还有一个可以配置的​​​​元素。可以配置的属性为​​forceBigDecimals​​,该属性可以控制是否强制​​​DECIMAL​​​和​​NUMERIC​​​类型的字段转换为Java类型的​​java.math.BigDecimal​​​,默认值为​​false​​,一般不需要配置。

默认情况下的转换规则为:

如果​​精度>0​​​或者​​长度>18​​​,就会使用​​java.math.BigDecimal​​如果​​精度=0​​​并且​​10


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3