Mybatis逆向工程自動生成程式碼檔案
阿新 • • 發佈:2020-12-26
Mybatis逆向工程自動生成程式碼檔案
一般來說都會新建另外一個專案,用於生成程式碼檔案,然後拷貝到需要的專案中。新建maven專案用於生成程式碼檔案,專案目錄如下所示:
pom.xml內容如下:
<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>com.nhu</groupId> <artifactId>MyMavenGenerator</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> </dependencies> <build/> </project>
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="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自動生成的註釋 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--資料庫連線的資訊:驅動類、連線地址、使用者名稱、密碼 --> <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@192.168.1.196:1521:orcl" userId="nhu_yzd" password="123"> </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.nhu.po" targetProject=".\src\main\java"> <!-- enableSubPackages:是否讓schema作為包的字尾 --> <property name="enableSubPackages" value="false" /> <!-- 從資料庫返回的值被清理前後的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper對映檔案生成的位置 --> <sqlMapGenerator targetPackage="com.nhu.mapper" targetProject=".\src\main\java"> <!-- enableSubPackages:是否讓schema作為包的字尾 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper介面生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.nhu.mapper" targetProject=".\src\main\java"> <!-- enableSubPackages:是否讓schema作為包的字尾 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 有些表的欄位需要指定java型別--> <table tableName="TABCKINCOME"></table> <table tableName="TABCKUSED"></table> <table tableName="TABDEPTINCOME"></table> <table tableName="TABDEPTUSED"></table> <table tableName="TABPRODUCTS"></table> <table tableName="TABPRODUCTSTYPE"></table> <table tableName="TABUNIT"></table> <table tableName="TABUSERS"></table> </context> </generatorConfiguration>
log4j.properties中的配置如下所示:
log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014 \u7248\u6743\u58F0\u660E\uFF1A\u672C\u6587\u4E3ACSDN\u535A\u4E3B\u300CJokerZhan\u300D\u7684\u539F\u521B\u6587\u7AE0\uFF0C\u9075\u5FAA CC 4.0 BY-SA \u7248\u6743\u534F\u8BAE\uFF0C\u8F6C\u8F7D\u8BF7\u9644\u4E0A\u539F\u6587\u51FA\u5904\u94FE\u63A5\u53CA\u672C\u58F0\u660E\u3002 \u539F\u6587\u94FE\u63A5\uFF1Ahttps://blog.csdn.net/JokerZhan/article/details/82942488
在com.nhu.main中新建一個java類:GeneratorMain.java 用於生成配置自動生成程式碼:
package com.nhu.main;
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 GeneratorMain {
public void generator() throws Exception {
//warnings為用於放置生成過程中警告資訊的集合物件
List<String> warnings = new ArrayList<String>();
//指定是否覆蓋重名檔案
boolean overwrite = true;
// 指定配置檔案
File configFile = new File("generatorConfig.xml");
//配置解析類
ConfigurationParser cp = new ConfigurationParser(warnings);
//配置解析類解析配置檔案並生成Configuration 配置物件
Configuration config = cp.parseConfiguration(configFile);
//負責如何處理重複檔案
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//逆向工程物件
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//執行逆向檔案生成操作
myBatisGenerator.generate(null);
}
// 執行main方法以生成程式碼
public static void main(String[] args) {
try {
GeneratorMain generatorSqlmap = new GeneratorMain();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
執行上圖程式碼後,F5重新整理專案便可以看到自動生成的程式碼檔案:
將自動生成的程式碼檔案拷貝到需要的專案中即可。
注意:在oracle資料庫中是不分大小寫的,如果要區分必須要加上引號。用Navicat的視覺化介面進行新增的表會自動在表名上加上引號,如 "TabUser" 。這會導致mybatis無法識別表名,從而無法進行逆向工程操作。建議在oracle中建表和表字段時,手動寫create語句,並且全部用大寫並且不加引號。