
我们前面的博文中了解了MyBatis的基本用法,也写了很多单表的CRUD方法,基本上每个表都需要用到这些方法,这些方法都很规范而且比较类似。
当数据库表的字段较少时,写起来还能接受,一旦字段过多或者需要在很多个表中写这些基本方法的时候,是不是很崩溃?
MyBatis开发团队提供了一个很强大的代码生成器—MyBatis Generator (MBG).
MBG通过丰富的配置可以生成不同类型的代码,代码包含了数据库表对应的实体类、Mapper接口类、Mapper XML文件和 Example对象等。 这些代码文件几乎包含了全部的单表操作方法。
使用MBG可以极大程度上方便我们使用MyBatis,减少很多重复操作。
在项目的src/main/resources中创建一个generator目录,在该目录下创建一个generatorConfig.xml文件

内容如下:
<generatorConfiguration>
<properties resource="db.properties" />
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
commentGenerator>
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}">
jdbcConnection>
<javaModelGenerator targetPackage="test.model" targetProject="src\main\java">
<property name="trimStrings" value="true" />
<property name="rootClass" value="com.artisan.mybatis.simple.model.BaseEntity" />
javaModelGenerator>
<sqlMapGenerator targetPackage="test.xml" targetProject="src\main\resources">
sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src\main\java">
javaClientGenerator>
<table tableName="%">
<generatedKey column="id" sqlStatement="MySql"/>
table>
context>
generatorConfiguration>常用的有如下方式:
我们这里使用 第一种方式 Java编写代码运行
第一步: 添加Maven依赖
<dependency>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-coreartifactId>
<version>${mybatis-generator-core.version}version>
dependency>第二步: 编写Java代码
package com.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;
/**
*
*
* @ClassName: Generator
*
* @Description: 读取 MBG 配置生成代码
*
* @author: Mr.Yang
*
* @date: 2018年4月27日 下午4:31:42
*/
public class Generator {
public static void main(String[] args) throws Exception {
// MBG 执行过程中的警告信息
List warnings = new ArrayList();
// 当生成的代码重复时,覆盖原代码
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类并实例化,否则会抛出异常。
不便之处在于,它和当前项目是绑定在一起的, 唉maven多子模块的情况下,可能需要增加代码量和配置量,配置多个,管理不方便。
但是总和来说,这种方式出现的问题最少,配置最为容易,因此推荐使用。
运行后生成的代码如下结构

大致用法,总结完毕