目录
1.until包中创建一个Generator.java文件 :
2. 用FastAutoGeneratorTest.java替代Generator.java
逆向工程(Reverse Engineering)是一种通过对产品、系统或软件的成品进行分析,从而推导出其设计原理、实现方法、技术细节等过程的方法。其核心思想是从现有的成果出发,反向探索其开发过程中的关键要素。
一、创建项目
仍旧是实战展示学习逆向工程,不管是用mybatis还是mybatis-plus,肯定都要先创建项目把架子搭起来。
因为这里主要是学习逆向工程生成,即侧重数据库的后端方面,所以这里只需要创建一个Java的maven工程,如果还想连带着展示前端,可以创建一个maven的javaweb项目。

依赖只需要这四个:
<dependencies>
<!-- MyBatis Plus Starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version> <!-- 使用更新的版本 -->
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--代码生成工具-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
<!--更方便地配置 MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
在这里只需要一个maven的Java项目(然后把它加上springboot启动类和依赖--也可以直接创建一个springboot项目),然后连接随便库的随便表即可。
二、mybatis版本
创建如下的目录结构:
1.until包中创建一个Generator.java文件 :
package com.qcby.reversetest01.util;
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;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Generator {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
/**指向逆向工程配置文件*/
File configFile = new File("reversetest01/src/main/resources/generatorConfig.xml");
ConfigurationParser parser = new ConfigurationParser(warnings);
Configuration config = parser.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
Generator generatorSqlmap = new Generator();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
当然需要自行更改一下里面的项目名:
如果这样报错的话,可以写上全路径:
2.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="mybatisGenerator" >
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<!--修改成自己的数据库和密码-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf-8&useSSL=false" userId="root"
password="2020">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--改成自己生成实体类的位置和项目名称-->
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.qcby.reversetest01.entity"
targetProject="D:/001_Myclass001/javava/reversetest01\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapper"
targetProject="D:/001_Myclass001/javava/reversetest01\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.qcby.reversetest01.mapper"
targetProject="D:/001_Myclass001/javava/reversetest01\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="t_product" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false"/>
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration>
当然这里面还有几个需要修改的部分:
同理,里面所有关于项目名称和路径相关的部分都要改(不行就换成全路径)。
如果在后面运行Generator.java出错服务器未连接的话,可以将这里的时区自行编辑:
![]()
复制自己之前能用的项目即可
除此之外,在最后这里连接数据库的表名也要自行设置好:
3.运行Generator.java文档
实现上面的所有配置后就可以运行文档,就可以看到:
项目自动为我们生成了这几个文档。
三、mybatis-plus版本
mybatis-plus版本的逆向工程比mybatis的更强大,更好用,更便捷;下面我们来演示它的使用方式。
1. 改pom.xml依赖
在这里我们不令创项目了,就还用这一个展示,所以首先把依赖改成下面的:
<dependencies>
<!-- MyBatis Plus Starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version> <!-- 使用更新的版本 -->
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入依赖代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
</dependencies>
2. 用FastAutoGeneratorTest.java替代Generator.java
修改依赖后,Generator.java就会失效报错,所以需要将Generator.java文件整个注释掉。
package com.qcby.reversetest01.util;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
public class FastAutoGeneratorTest {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/mybatis_plus_1?characterEncoding=utf-8&useSSL=false", "root", "2020")
.globalConfig(builder -> {
builder.author("qcby") // 设置作者
.outputDir("D:/001_Myclass001/javava/reversetest01"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.qcby") // 设置父包名
.moduleName("reversetest01") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D:/001_Myclass001/javava/reversetest01")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_product") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker 引擎模板,默认的是Velocity引擎模板
.execute();
}
}
同样,里面的路径或是项目名称按照需求更改。
然后启动它,可以看见:
这里我的生成路径没弄好,但是可以看出mybatis-plus版本的生成功能比mybatis版本的更强大。