作用:可以针对数据库中的表单自动生成MyBatis执行所需要的代码(包括Java实体类、Mapper映射配置及Mapper代理接口)。
适应场景:更适用于大型工程的开发。
逆向工程配置
在实际开发中,经常需要单独创建一个逆向工程,然后将生成的代码复制到真正的Web工程中,防止直接在原工程中生成的文件覆盖掉直接开发的同名文件。
创建的工程的完整目录:
编写generatorConfig.xml的配置:
<?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">
<generatorConfiguration>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis_test?characterEncoding=utf-8" userId="root"
password="123456">
</jdbcConnection>
<!--默认false,把JDBC DECIMAL和 NUMERIC类型解析为Integer,
为 true时把JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="cn.com.sm.po"
targetProject=".\src\main\java"><!--.\ 表示项目文件所在目录之下的目录。-->
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="cn.com.sm.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.com.sm.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="user"></table>
</context>
</generatorConfiguration>
逆向数据文件生成类
编写完配置文件之后,就需要加载该配置文件,编写GeneratorSqlMap类:
package cn.com.generator.main;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.api.ShellCallback;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
public class GeneratorSqlMap {
public void generator() throws Exception{
//warnings为用于放置生成过程中警告信息的集合对象
List<String> warnings = new ArrayList<String>();
//ָ指定是否覆盖重名文件
boolean overwrite = true;
//配置解析类
//利用类装载器,定位到的是编译过后classes文件所在同级目录下
File configFile =
new File(this.getClass().getClassLoader().getResource("generatorConfig.xml").getPath());
// 或用.\表示项目文件所在目录
// File configFile =
// new File(".\\src" +
// "\\main" +
// "\\resources\\generatorConfig.xml");
//配置解析类
ConfigurationParser cp = new ConfigurationParser(warnings);
//配置解析类解析配置文件并生成Configuration配置对象
Configuration config = cp.parseConfiguration(configFile);
//DefaultShellCallback负责如何处理重复文件
ShellCallback callback = new DefaultShellCallback(overwrite);
//逆向工程对象
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
//ִ执行逆向文件生成操作
myBatisGenerator.generate(null);
}
//执行逆向方法
public static void main(String[] args) throws Exception {
GeneratorSqlMap generatorSqlmap = new GeneratorSqlMap();
generatorSqlmap.generator();
}
}
运行该main方法结果,生成了新的文件:
`
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。