1. 程式人生 > >使用MyBatis Generator自動生成實體、mapper和dao層

使用MyBatis Generator自動生成實體、mapper和dao層

本人使用:

  • 整合開發環境:idea
  • 專案管理工具:maven
  • 資料庫:oracle
  • 框架:Spring+SpringMVC+myBatis

主要步驟:

  1. 在pom.xml中加入外掛依賴
  2. 寫mbgConfiguration.xml檔案,jdbc.properties檔案
  3. 寫/SSM/src/main/java/main/GenMain.java main方法
  4. 執行main函式,重新整理

具體實現:

    1,在pom.xml中加入外掛依賴

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>

<!-- mybatis-generator-core 反向生成java程式碼-->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.5</version>
</dependency>

    2、寫mbgConfiguration.xml檔案,jdbc.properties檔案

db.driverClassName=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
db.username=PARK_SERVICE
db.password=parkservice

## 連線池資訊
# 連線池中可同時連線的最大的連線數(預設值為8,調整為20,高峰單機器在20併發左右,自己根據應用場景定)
db.maxTotal=50
# 連線池最小空閒
db.minIdle=10
# 最大等待時間,當沒有可用連線時,連線池等待連線釋放的最大時間,超過該時間限制會丟擲異常,
# 如果設定-1表示無>限等待(預設為無限,調整為60000ms,避免因執行緒池不夠用,而導致請求被無限制掛起)
db.maxWaitMillis=60000


# 驗證連線是否可用sql
db.validationQuery=SELECT 1 FROM DUAL
# 對拿到的connection進行validateObject校驗
db.testOnBorrow=true
db.poolPreparedStatements=true
db.defaultAutoCommit=false

# 對應的類檔案【entity,dao】 存放位置
park.targetproject=F:\\SSM-PARKSERVICES\\PARK-SERVICE\\src\\main\\java
# 對應的mapper.xml檔案 存放位置
park.targetresources=F:\\SSM-PARKSERVICES\\PARK-SERVICE\\src\\main\\resources
<?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">
<!-- 第一種mybatis逆向生成xml配置:配置生成器 -->
<generatorConfiguration>

    <!--引入資料庫連線配置檔案-->
    <properties resource="db.properties" />

    <!--
        context:生成一組物件的環境
        id:必選,上下文id,用於在生成錯誤時提示
        defaultModelType:指定生成物件的樣式
            1,conditional:類似hierarchical;
            2,flat:所有內容(主鍵,blob)等全部生成在一個物件中;
            3,hierarchical:主鍵生成一個XXKey物件(key class),Blob等單獨生成一個物件,其他簡單屬性在一個物件中(record class)
        targetRuntime:
            1,MyBatis3:預設的值,生成基於MyBatis3.x以上版本的內容,包括XXXBySample;
            2,MyBatis3Simple:類似MyBatis3,只是不生成XXXBySample;
        introspectedColumnImpl:類全限定名,用於擴充套件MBG
    -->
    <context id="sqlserverTables" targetRuntime="MyBatis3">
        <!-- 自動識別資料庫關鍵字,預設false,如果設定為true,根據SqlReservedWords中定義的關鍵字列表;
                一般保留預設值,遇到資料庫關鍵字(Java關鍵字),使用columnOverride覆蓋 -->
        <property name="autoDelimitKeywords" value="false"/>
        <!-- 生成的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"/>

        <!-- 生成的pojo,將implements Serializable-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>

        <commentGenerator>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!-- 資料庫連結URL、使用者名稱、密碼 -->
        <jdbcConnection driverClass="${db.driverClassName}"
                        connectionURL="${db.url}"
                        userId="${db.username}"
                        password="${db.password}">
        </jdbcConnection>

        <!--預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer
                true,把JDBC DECIMAL 和 NUMERIC 型別解析為java.math.BigDecimal-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="true" />
        </javaTypeResolver>

        <!--生成model模型,對應的包路徑,以及檔案存放路徑(targetProject),targetProject可以指定具體的路徑,如./src/main/java,
            也可以使用“MAVEN”來自動生成,這樣生成的程式碼會在target/generatord-source目錄下-->
        <javaModelGenerator targetPackage="com.zrkj.entity" targetProject="${park.targetproject}">
            <property name="enableSubPackages" value="true"/>
            <!-- 從資料庫返回的值被清理前後的空格  -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--對應的mapper.xml檔案  -->
        <sqlMapGenerator targetPackage="mappers" targetProject="${park.targetresources}">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 對應的Mapper介面類檔案 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.zrkj.dao" targetProject="${park.targetproject}">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>


        <!-- 列出要生成程式碼的所有表,這裡配置的是不生成Example檔案 -->
        <!--
            tableName:資料庫中的表名,
            domainObjectName:取得檔案類名
        -->
        <table tableName="INVOICE" domainObjectName="Invoice"
               enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false" >
            <property name="useActualColumnNames" value="false"/>
        </table>

    </context>
</generatorConfiguration>

3.寫GenMain.java main方法

package com.zrkj.generator;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
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.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;


/**************************************
 * @author E-mail:[email protected]
 * @version 建立時間:2017年6月23日 下午9:18:19
 * 類說明:
 *     mybatis逆向工程main函式
 ***************************************
 */

public class GenMain {

    public static void main(String[] args) {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //如果這裡出現空指標,直接寫絕對路徑即可。
        String genCfg = "/mbgConfiguration.xml";
        File configFile = new File(GenMain.class.getResource(genCfg).getFile());
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = null;
        try {
            config = cp.parseConfiguration(configFile);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = null;
        try {
            myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        }
        try {
            myBatisGenerator.generate(null);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

4、執行Main方法,重新整理專案,就會在上面mbgConfiguration.xml中配置的對應檔案的目錄下生成實體,mapper,dao了。