运行MyBatis Generator
MBG 提供了很多种运行方式,常用的有以下几种。
-
使用 Java 编写代码运行
-
从命令提示符运行
-
使用 Maven Plugin 运行
-
使用 Eclipse 插件运行
这几种方式都有各自的优点和缺点,大家在看完下面的详细介绍后,可以根据自己的情况选择合适的方式,下面按顺序详细介绍这几种运行方式。
使用Java编写代码运行
在写代码前,需要先把 MBG 的 jar 包添加到项目当中。
第一种方式是,从地址 https://github.com/mybatis/generator/releases 下载 jar 包。
第二种方式是,使用 Maven 方式直接引入依赖,在 pom.xml 中添加如下依赖。
<!--MyBatis生成器-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
在 MyBatis 项目中添加 tk.mybatis.generator 包,创建 Generator.java 类。
package tk.mybatis.generator;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
/**
* 读取 MBG 配置生成代码
*/
public class Generator {
public static void main(String[] args) throws Exception {
//MBG 执行过程中的警告信息
List<String> warnings = new ArrayList<String>();
//当生成的代码重复时,覆盖原代码
boolean overwrite = true;
//读取我们的 MBG 配置文件
InputStream is = Generator.class.getResourceAsStream("/generator/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//创建 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行生成代码
myBatisGenerator.generate(null);
//输出警告信息
for(String warning : warnings){
System.out.println(warning);
}
}
}
使用 Java 编码方式运行的好处是,generatorConfig.xml 配置的一些特殊的类(如 commentGenerator 标签中 type 属性配置的 MyCommentGenerator 类)只要在当前项目中,或者在当前项目的 classpath 中,就可以直接使用。使用其他方式时都需要特别配置才能在 MBG 执行过程中找到 MyCommentGenerator 类并实例化,否则都会由于找不到这个类而抛出异常。
使用 Java 编码不方便的地方在于,它和当前项目是绑定在一起的,在 Maven 多子模块的情况下,可能需要增加编写代码量和配置量,配置多个,管理不方便。但是综合来说,这种方式出现的问题最少,配置最容易,因此推荐使用。
从命令提示符运行
从命令提示符运行就必须使用 jar 包,按照 5.3.1 节中提供的地址下载MBG的压缩包,解压后从 lib 目录中找到 mybatis-generator-core-1.3.3.jar 文件。
将这个 jar 文件和 generatorConfig.xml 文件放到一起。从这里就可以体会到为什么说这种配置方式不方便了,因为需要修改 generatorConfig.xml 配置文件。
将 MySQL 的 JDBC 驱动(如 mysql-connector-java-5.1.38.jar)放到当前目录中,然后再配置文件中添加 classPathEntry,代码如下。
<generatorConfiguration>
<classPathEntry location="F:\.m2\repository\mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar"/>
<context id="MySqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!--其它原有配置-->
</context>
</generatorConfiguration>
除此之外,在当前目录中添加 src 文件夹,在 src 中再添加 main 文件夹,main 文件夹中添加 java 和 resources 文件夹。此时,当前目录的结构如图5-1所示。

下面介绍一下 MBG 命令行可以接受的几个参数。
-
-configfile fileName:指定配置文件的名称。
-
-overwrite(可选):指定了该参数后,如果生成的 Java 文件存在已经同名的文件,新生成的文件则会覆盖原有的文件。没有指定该参数的情况下,如果存在同名的文件,MBG 会为新生成的代码文件指定一个唯一的名字(如 MyClass.java.1、MyClass.java.2 等)。
-
-verbose(可选):指定该参数,执行过程会输出到控制台。
-
-forceJavaLogging(可选):指定该参数,MBG 将会使用 Java 日志记录而不会使用 Log4J,即使 Log4J 在运行时的类路径中。
-
-contextids context1,context2,..(可选):指定该参数,逗号隔开的这些 context 会被执行。这些指定的 context 必须和配置文件中 context 标签的 id 属性一致。只有指定的 contextid 会被激活执行。如果没有指定该参数,所有的 context 都会被激活执行。
-
-tables table1,table2,…(可选):指定该参数,逗号隔开的这些表会被运行,这些表名必须和 table 配置中的表名完全一致,只有被指定的表会被执行。如果没有指定该参数,所有的表都会被执行。
除了上面几个 MBG 的参数外,还要简单介绍一下 java 命令的参数。
-
-jar XXX.jar:执行 jar 包时的基本参数。
-
-Dfile.encoding=XXX:一般命令行的环境都是 GBK 编码,因此如果需要生成 UTF-8 编码的代码,则要在 java 命令上指定该参数,这里的 XXX 可以是 UTF-8、GBK 等编码。
-
-cp:当需要依赖其他的 jar 包时,通过 cp 命令可将其他 jar 包添加到当前的 classpath 环境中,使用 -cp 时不能使用 -jar。
知道基本的命令后,先用最简单的命令执行 MBG 看一下结果,在当前目录中打开命令行(或将命令行移到当前目录),输入以下命令。
java -jar mybatis-generator-core-1.3.3.jar -configfile generatorConfig.xml
执行这个命令后,可以在 src/main 下面的对应目录中看到生成的代码,如果查看这个文件的编码,会发现这些编码都是 GBK 方式。现在很多项目,尤其是使用 Maven 的项目,基本上都是 UTF-8 编码,想要生成 UTF-8 编码的文件,可以输入如下命令(由于上一条命令已经生成了一次,因此这里增加了 -overwrite 参数)。
java -Dfile.encoding=UTF-8 -jar mybatis-generator-core-1.3.3.jar -configfile generatorConfig.xml -overwrite
再次查看编码,会发现编码都已经变成 UTF-8 方式了。
可以看到,命令行方式的特点是完全独立于项目,针对不同项目配置不同的 generatorConfig.xml 文件。在对 MBG 的定制很少的时候,这种方式使用起来也比较方便。但是当需要定制一些自己的实现时,这种方式就会变得麻烦起来,假设要使用自己实现的 MyCommentGenerator 类,需要按照如下步骤进行操作。
-
将包含 MyCommentGenerator 类的项目打包为 jar(假设为 my-comment-generator.jar)。
-
将该 jar 包放到当前目录中。
-
需要使用 -cp 参数代替 -jar,将依赖的 jar 都列出来。
修改的命令如下。
java -Dfile.encoding=UTF-8 -cp my-comment-generator.jar;mybatis-generator-core-1.3.3.jar org.mybatis.generator.api.ShellRunner -configfile generatorConfig.xml -overwrite
需要注意,-cp 后面有多个 jar 包时,在 Windows 系统中要使用英文分号 “;” 隔开,在 Linux 系统中要使用英文冒号 “:” 隔开,jar 包最后面需指明要执行的主类(包含 main 方法的类)。
这种方式的命令写起来虽然麻烦,但是可以在 Windows 中创建 .bat 批处理文件(Linux 为 .sh),在当前目录下创建一个 run.bat 文件,在 run.bat 中输入上面的命令保存。之后需要运行时,直接用鼠标双击 run.bat 即可。
使用Maven Plugin运行
使用 Maven 插件方式和第一种 Java 编码方式类似,都是和项目绑定在一起的,当需要引用其他类时,需要给 Maven 插件添加依赖,否则会找不到类。
在 MyBatis simple 项目的 pom.xml 中添加如下插件配置。
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.3</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>simple</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
configuration 标签中的配置类似于命令行中的参数,通过名称即可理解。
这个配置中特殊的地方在于插件中的 dependencies 配置,在 generatorConfig.xml 配置文件中,没有通过 classPathEntry 方式配置 JDBC 驱动,这里通过添加依赖将 JDBC 驱动添加到了 MBG 的 classpath 中,另外还添加了当前项目的依赖。这样一来,若在当前项目中定制了 MBG 的某个实现,配置后可以直接找到。需要特别注意的是,当前项目必须执行过 mvn install(通过 Maven 命令将当前项目安装到本地仓库),否则会找不到当前项目的依赖。
配置好插件之后,可以执行如下 Maven 命令。
mvn mybatis-generator:generate
在 Eclipse 中执行命令时,可以在 pom.xml 文件上单击鼠标右键选择 Run As 中的 Maven build 选项,打开如图5-2所示的界面。

将 Name 改为 simple-mbg,然后在 Goals 中输入 mybatis-generator:generate,可以选择 Skip Tests,最后点击 Run 执行即可。下次若想重新执行,从 Eclipse 工具栏的 Run 中选择 simple-mbg 即可。
使用Eclipse插件运行
MBG 针对 Eclipse 提供了相应的插件,可以更好地生成代码。Eclipse 插件的最大好处就是,这是 MBG 中唯一一种支持代码合并的运行方式。在前面几种运行方式中,生成代码的注释中都有一个 @mbggenerated 标记,这个标记的含义是,被标记的这个字段或方法是自动生成的,重新生成时会被覆盖。没有这个标记的代码不是自动生成的,不应该被覆盖。但是前面 3 种方式在重新生成的时候,这个标记没有任何作用,不管有没有这个标记都会被覆盖,即自己在生成后的代码中添加的内容都会被覆盖。这就导致增加字段或方法后,若需要重新生成,就必须自己比对文件把加入的代码恢复,使用起来很不方便。MBG 的 Eclipse 插件支持这个标记,因此该插件有很大的优势。
安装Eclipse插件
从 MBG 的发布页面 https://github.com/mybatis/generator/releases 中下载插件,此处使用如下版本。
mybatis-generator-eclipse-site-1.3.3.201606241937.zip
下载插件后,在 Eclipse 中选择菜单 Help 中的 Install New Software,打开如图5-3所示的窗口。

点击 Add 按钮,在弹出的窗口中选择 Archive,选择下载完成的 MBG 插件,输入 Name MBG 后,点击 OK。
从下拉列表中选择全部的 MyBatis Generator,点击 Next,一步步完成安装,安装完成后重启 Eclipse。
使用Eclipse插件
打开之前在 src/main/resources 下面创建的 generator/generatorConfig.xml 文件,对这个文件做一些简单修改。
Eclipse 插件的运行方式有点特殊,JDBC 驱动需要通过 classPathEntry 进行配置,其他定制的类只要在当前项目或当前项目的 classpath 中即可使用。
在配置文件中增加 classPathEntry 配置,指定 MySQL 驱动的位置,然后在 context 中添加一个 javaFileEncoding 的 property 标签配置,指定生成代码的编码方式为 UTF-8,修改的部分配置如下。
<generatorConfiguration>
<classPathEntry location="F:\.m2\repository\mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar"/>
<context id="MySqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<!--其它原有配置-->
</context>
</generatorConfiguration>
除此之外,在和 targetProject 有关的相对路径中需要增加当前的项目名称,将 src\main\java 改为 simple\src\main\java,将 src\main\resources 改为 simple\src\main\resources。
完成上述修改后,在配置文件中单击鼠标右键,选择如图5-4所示的选项。

点击 Generate MyBatis 后就会自动生成代码。