MyBatis逆向工程

MyBatis逆向工程


前言

版本说明

mybatis=3.5.5
jdk=8
mysql=8.0.21
mybatis-generator-core=1.4.0


相关链接:


Mybatis-Generator

MBG 可以生成 MyBatis3DynamicSql 、MyBatis3Kotlin 、MyBatis3 、MyBatis3Simple ,区别详见官网:http://mybatis.org/generator/quickstart.html# ;只需要讲配置文件中 context 属性 targetRuntime 修改为对应值即可,targetRuntime 值如下:

MyBatis3DynamicSql
MyBatis3Kotlin
MyBatis3
MyBatis3Simple


Mybatis Generator 三种使用方式


  1. 命令行方式
  2. Java 编码方式
  3. 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


上一篇:PLSQL 官方下载及安装


下一篇:IDEA安装后的配置