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