1. 程式人生 > 實用技巧 >Mybatis逆向工程自動生成程式碼檔案

Mybatis逆向工程自動生成程式碼檔案

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語句,並且全部用大寫並且不加引號。