今天学习了一下Mybatis的逆向工程,在网上找资料时,发现网上的资料真的是鱼龙混杂,经过多次测试,最终找到了个人感觉最好用的逆向工程的代码,并作出如下总结。
一、什么是逆向工程
简单点说,就是通过数据库中的单表,自动生成java代码。
Mybatis官方提供了逆向工程,可以针对单表自动生成mybatis代码(mapper.java\mapper.xml\po类)
企业中,逆向工程是个很常用的工具,比我们手动创建映射文件的配置信息方便很多。
二、教程开始
首先放一张我的项目结构图:项目你可以自己新建,什么项目都可以,只要是maven项目就行。
1、pom.xml中加入依赖,第一个是访问mysql用到的,第二个是mybatis的包,第三个是逆向工程的包,逆向工程生成之后可以删除第三个依赖
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
2、创建java类GeneratorSqlMap,代码如下:
import java.io.File;
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;
public class GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("src/main/resources/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.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 {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
需要注意的就是逆向工程配置文件的加载时的路径问题!
这里,我使用的IDE是IntelliJ IDEA,所以路径就是src/main/resources/generatorConfig.xml。
如果使用的是Eclipse等软件的话,这里需要注意,其余代码无需改变。
3、在resources目录下创建db.properties文件,内容如下。
#第一行代码需要特别注意,db.driverClass=com.mysql.cj.jdbc.Driver是Mysql8的写法。
#如果是低版本,则改为db.driverClass=com.mysql.jdbc.Driver即可
db.driverClass=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/ssm
db.username=root
db.password=root
4、配置逆向工程的配置文件,代码如下:
代码拿到手需要修改的有
1、想要生成文件的路径,如果你的目录习惯和我一致,那这个也无需更改。
2、你有哪些表需要逆向生成java代码,就在最下面配置一下即可
<?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>
<!-- 引入数据库配置文件 -->
<properties resource="db.properties"/>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="${db.driverClass}"
connectionURL="${db.url}" userId="${db.username}"
password="${db.password}">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="vip.wefun.pojo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mappers"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="vip.wefun.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表,你有哪些数据库表需要逆向工程,你就写哪些 -->
<table schema="" tableName="tb_content"/>
<table schema="" tableName="tb_content_category"/>
<table schema="" tableName="tb_item"/>
<table schema="" tableName="tb_item_cat"/>
<table schema="" tableName="tb_item_desc"/>
<table schema="" tableName="tb_item_param"/>
<table schema="" tableName="tb_item_param_item"/>
<table schema="" tableName="tb_order"/>
<table schema="" tableName="tb_order_item"/>
<table schema="" tableName="tb_order_shipping"/>
<table schema="" tableName="tb_user"/>
</context>
</generatorConfiguration>
5、执行第二步的java代码,生成的文件目录结构如下图: