MyBatis逆向工程
前言
版本说明
mybatis=3.5.5
jdk=8
mysql=8.0.21
mybatis-generator-core=1.4.0
相关链接:
- mysql maven 地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java
- MyBatis 官方文档:https://mybatis.org/mybatis-3/zh/index.html
- MyBatis Github 地址:https://github.com/mybatis/mybatis-3
- MyBatis maven 地址:https://mvnrepository.com/artifact/org.mybatis/mybatis
- mybatis-generator 官网地址:http://mybatis.org/generator/index.html
- mybatis-generator maven 地址:https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core
Mybatis-Generator
MBG
可以生成 MyBatis3DynamicSql
、MyBatis3Kotlin
、MyBatis3
、MyBatis3Simple
,区别详见官网:http://mybatis.org/generator/quickstart.html# ;只需要讲配置文件中 context
属性 targetRuntime
修改为对应值即可,targetRuntime
值如下:
MyBatis3DynamicSql
MyBatis3Kotlin
MyBatis3
MyBatis3Simple
Mybatis Generator
三种使用方式
- 命令行方式
Java
编码方式Maven
方式
generator-config.xml 文件
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--
mybatis逆向工程配置说明详见官网:http://mybatis.org/generator/running/runningWithMaven.html
mybatis 标签属性说明:http://mybatis.org/generator/configreference/xmlconfig.html#
-->
<!-- targetRuntime: MyBatis3DynamicSql/MyBatis3/MyBatis3Simple -->
<context id="mysql" defaultModelType="flat" targetRuntime="MyBatis3">
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 格式化java代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter" />
<!-- 格式化XML代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter" />
<!--添加分隔符-->
<property name="beginningDelimiter" value="'"></property>
<property name="endingDelimiter" value="'"></property>
<!--默认生成getter/setter方法,使用插件忽略生成getter/setter方法-->
<!--<plugin type="com.mybatis.plugin.IngoreSetterAndGetterPlugin" />-->
<!--用于在实体类中实现java.io.Serializable接口-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<!--用于重写equals 和 hashCode 方法-->
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin">
<property name="useEqualsHashCodeFromRoot" value="true"/>
</plugin>
<!--用于生成 toString 方法-->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin">
<property name="useToStringFromRoot" value="true"/>
</plugin>
<!--生成注释信息的配置-->
<commentGenerator>
<!--阻止生成注释,默认为false-->
<property name="suppressAllComments" value="true"></property>
<!--阻止生成的注释包含时间戳,默认为false-->
<property name="suppressDate" value="true"></property>
<!--注释是否添加数据库表的备注信息,默认为false-->
<property name="addRemarkComments" value="true"></property>
</commentGenerator>
<!--数据库连接信息-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db_mybatis?serverTimezone=Asia/Shanghai"
userId="root"
password="123456" />
<!--javaTypeResolver:节点用于指定和配置 Java 类型解析器。-->
<javaTypeResolver>
<!--默认的解析器可能会将数据库类型 decimal 或 numberic 解析为Short、Integer、Long等 Java 类型,-->
<property name="forceBigDecimals" value="ture" />
<!--是否不强制将数据库类型 date, time 和 timestamp 解析为 Date;
默认为false,如果为true,
解析规则将变成:date -> LocalDate,time -> LocalTime,timestamp -> LocalDateTime-->
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<!--javaModelGenerator : 节点用于配置实体类生成器-->
<!--targetPackage:生成实体类存放的包名 targetProject:指定目标项目路径,可以使用绝对路径或者相对路径-->
<javaModelGenerator targetPackage="top.simba1949.model" targetProject="D:\Java">
<!-- constructorBased为true就会使用构造方法入参,为false使用setter方法入参,默认为false -->
<!--<property name="constructorBased" value="false"></property>-->
<!--enableSubPackages 是否在targetPackage基础上生成子包。默认为false。当为true时,会将表所在 schema 名作为子包名-->
<!--<property name="enableSubPackages" value="false" />-->
<!--immutable:用于配置实体类属性是否可变,如果为true,不管constructorBased设置,都会使用构造方法入参不会生成setter方法。
如果为false实体类属性可以改变,默认为false-->
<!--<property name="immutable" value="false"></property>-->
<!--设置所有实体类的基类-->
<!--<property name="rootClass" value="类的全限定名"></property>-->
<!--在setter方法中是否对传入字符串进行 trim 操作-->
<!--<property name="trimStrings" value="true" />-->
</javaModelGenerator>
<!--sqlMapGenerator : 节点用于配置 XML 生成器-->
<sqlMapGenerator targetPackage="top.simba1949.mapper" targetProject="D:\Java">
<!--enableSubPackages : 是否在targetPackage基础上生成子包。默认为false。当为true时,会将表所在 schema 名作为子包名-->
<!--<property name="enableSubPackages" value="false" />-->
</sqlMapGenerator>
<!-- javaClientGenerator:最多配置一个,用于生成mapper接口
MyBatis3:ANNOTATEDMAPPER、MIXEDMAPPER、XMLMAPPER
MyBtais3Simple:ANNOTATEDMAPPER、XMLMAPPER
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="top.simba1949.mapper" targetProject="D:\Java">
</javaClientGenerator>
<!--表的配置-->
<table schema="db_mybatis" tableName="%"></table>
</context>
</generatorConfiguration>
Maven 方式
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>top.simba1949</groupId>
<artifactId>mybatis-generator-plugin-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<!--指定代码生成器配置文件-->
<configurationFile>./src/main/resources/generator-config.xml</configurationFile>
</configuration>
<dependencies>
<!--配置数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
运行命令
直接运行 maven 的 install 命令即可
Java 编码方式
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>top.simba1949</groupId>
<artifactId>mybatis-generator-plugin-java</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</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.4.0</version>
</dependency>
</dependencies>
</project>
Java 运行代码
package top.simba1949;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
/**
* @author SIMBA1949
* @date 2020/9/2 8:15
*/
public class GeneratorApplication {
public static void main(String[] args) throws InvalidConfigurationException, IOException, XMLParserException, SQLException, InterruptedException {
ArrayList<String> warnings = new ArrayList<>();
boolean overWrite = true;
String path = GeneratorApplication.class.getClassLoader().getResource("").getPath();
File configFile = new File(path + "/generator-config.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);
}
}
命令行方式
generator-config.xml 文件
这里的配置文件需要指定 MySQL 驱动的路径
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--
mybatis逆向工程配置说明详见官网:http://mybatis.org/generator/running/runningWithMaven.html
mybatis 标签属性说明:http://mybatis.org/generator/configreference/xmlconfig.html#
-->
<!--指定数据库驱动路径-->
<classPathEntry location="./mysql-connector-java-8.0.21.jar"/>
<context id="mysql" defaultModelType="flat" targetRuntime="MyBatis3Simple">
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 格式化java代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter" />
<!-- 格式化XML代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter" />
<!--添加分隔符-->
<property name="beginningDelimiter" value="'"></property>
<property name="endingDelimiter" value="'"></property>
<!--用于在实体类中实现java.io.Serializable接口-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<!--用于重写equals 和 hashCode 方法-->
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin">
<property name="useEqualsHashCodeFromRoot" value="true"/>
</plugin>
<!--用于生成 toString 方法-->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin">
<property name="useToStringFromRoot" value="true"/>
</plugin>
<!--生成注释信息的配置-->
<commentGenerator>
<!--阻止生成注释,默认为false-->
<property name="suppressAllComments" value="true"></property>
<!--阻止生成的注释包含时间戳,默认为false-->
<property name="suppressDate" value="true"></property>
<!--注释是否添加数据库表的备注信息,默认为false-->
<property name="addRemarkComments" value="true"></property>
</commentGenerator>
<!--数据库连接信息-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db_mybatis?serverTimezone=Asia/Shanghai"
userId="root"
password="123456" />
<!--javaTypeResolver:节点用于指定和配置 Java 类型解析器。-->
<javaTypeResolver>
<!--默认的解析器可能会将数据库类型 decimal 或 numberic 解析为Short、Integer、Long等 Java 类型,-->
<property name="forceBigDecimals" value="ture" />
<!--是否不强制将数据库类型 date, time 和 timestamp 解析为 Date;
默认为false,如果为true,
解析规则将变成:date -> LocalDate,time -> LocalTime,timestamp -> LocalDateTime-->
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<!--javaModelGenerator : 节点用于配置实体类生成器-->
<!--targetPackage:生成实体类存放的包名 targetProject:指定目标项目路径,可以使用绝对路径或者相对路径-->
<javaModelGenerator targetPackage="top.simba1949.model" targetProject="D:\Java">
<!-- constructorBased为true就会使用构造方法入参,为false使用setter方法入参,默认为false -->
<property name="constructorBased" value="true"></property>
<!--enableSubPackages 是否在targetPackage基础上生成子包。默认为false。当为true时,会将表所在 schema 名作为子包名-->
<property name="enableSubPackages" value="false" />
<!--immutable:用于配置实体类属性是否可变,如果为true,不管constructorBased设置,都会使用构造方法入参不会生成setter方法。
如果为false实体类属性可以改变,默认为false-->
<property name="immutable" value="false"></property>
<!--设置所有实体类的基类-->
<!--<property name="rootClass" value="类的全限定名"></property>-->
<!--在setter方法中是否对传入字符串进行 trim 操作-->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--sqlMapGenerator : 节点用于配置 XML 生成器-->
<sqlMapGenerator targetPackage="top.simba1949.mapper" targetProject="D:\Java">
<!--enableSubPackages : 是否在targetPackage基础上生成子包。默认为false。当为true时,会将表所在 schema 名作为子包名-->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- javaClientGenerator:最多配置一个,用于生成mapper接口
MyBatis3:ANNOTATEDMAPPER、MIXEDMAPPER、XMLMAPPER
MyBtais3Simple:ANNOTATEDMAPPER、XMLMAPPER
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="top.simba1949.mapper" targetProject="D:\Java">
</javaClientGenerator>
<!--表的配置-->
<table schema="db_mybatis" tableName="t_%">
<generatedKey column="id" sqlStatement="mysql"></generatedKey>
</table>
</context>
</generatorConfiguration>
maven 运行命令
java -jar mybatis-generator-core-1.4.0.jar -configfile generator-config.xml