ibatis和myBatis的逆向工程使用

夢想-風清揚發表於2018-11-29

逆向工程是一種根據資料庫欄位逆向生成bean類以及xml檔案的技術。在日常開發中,對於簡單模組的研發非常實用。
根據目前的持久層框架,逆向工程分為兩種:
ibatis和mybatis
下面逐一介紹
1 .mybatis
在想要生成逆向程式碼的地方新建generatorConfig.xml配置檔案,將檔案放到resources目錄下(注意將resources設定為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">

<generatorConfiguration>

    <context id="default" targetRuntime="MyBatis3">
        <!--javaBean實現序列化介面-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
        <!-- genenat entity時,生成toString -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
        <!-- 自定義物理分頁  可生成支援Mysql資料的limit  不支援Oracle -->
        <!--<plugin type="org.mybatis.generator.plugins.PaginationPlugin" />-->

        <!-- generate entity時,生成hashcode和equals方法-->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" />

        <!-- 此處是將Example改名為Criteria 當然 想改成什麼都行~    -->
        <!--   <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
             <property name="searchString" value="Example$" />
             <property name="replaceString" value="Criteria" />

           </plugin>-->

        <!-- 此處是將UserMapper改名為UserDao 介面 當然 想改成什麼都行~  -->
        <!--  <plugin type="org.mybatis.generator.plugins.rename.">
             <property name="searchString" value="Mapper$" />
             <property name="replaceString" value="Dao" />
          </plugin>-->


        <!-- 防止生成的程式碼中有很多註釋,加入下面的配置控制 -->
        <commentGenerator>

            <property name="suppressDate" value="true" />
        </commentGenerator>

        <!-- 資料庫連線 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://xxxx:3306/資料庫表名"
                        userId="root" password="root">
        </jdbcConnection>

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

        <!-- 資料表對應的持久層  -->
        <javaModelGenerator targetPackage="po類生成的位置" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- daopper 對映配置檔案 -->
        <sqlMapGenerator targetPackage="xml檔案生成位置"  targetProject="src/main/resources">
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- mybatis3中的mapper介面 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="mapper介面生成的位置" targetProject="src/main/java">
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>


        <!-- 資料表進行生成操作 schema:相當於庫名; tableName:表名; domainObjectName:對應的DO -->

        <!--此處書寫想要生成逆向工程的表名-->    
        <table schema=" "  tableName="表名"></table>
    </context>
</generatorConfiguration>

在當前工程的pom檔案中新增外掛依賴
注意build標籤要單獨放置,不要巢狀在其他標籤中,否則外掛無法正常載入

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.5</version>
            <configuration>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql.driver.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

外掛中需要新增資料庫的驅動依賴,我只新增了mysql的,可以根據自己的需要新增對應的驅動依賴。
新增成功之後,在Maven對應的工程下會生成如下的外掛
mybatis逆向工程外掛
然後點選generate命令即可生成逆向工程。
以上就是mybatis的逆向工程生成
2 .ibatis
同mybatis一樣,在需要生成ibatis的地方新增generatorConfig.xml配置檔案,將檔案放到resources目錄下(注意將resources設定為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">
<generatorConfiguration>
    <!--匯入屬性配置-->
    <!--<properties resource="generator.properties"></properties>-->
    <!--指定特定資料庫的jdbc驅動jar包的位置 -->
    <!--<classPathEntry location="${jdbc.driverLocation}"/>-->
    <context id="default" targetRuntime="Ibatis2Java5">
        <!-- generate entity時,生成serialVersionUID -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- generate entity時,生成hashcode和equals方法 -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
        <!-- 這個外掛只會增加字串欄位對映到一個JDBC字元的方法 -->
        <plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin"/>
        <!-- genenat entity時,生成toString -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- optional,旨在建立class時,對註釋進行控制 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <!--jdbc的資料庫連線 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://XXXX:3306/資料庫表名" userId="root"
                        password="root">
        </jdbcConnection>


        <!-- 非必需,型別處理器,在資料庫型別和java型別之間的轉換控制-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在該專案下所在的路徑
        -->
        <javaModelGenerator targetPackage="po類生成位置" targetProject="src/main/java">
            <!-- 是否對model新增 建構函式 -->
            <property name="constructorBased" value="true"/>

            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>

            <!-- 建立的Model物件是否 不可改變  即生成的Model物件不會有 setter方法,只有構造方法 -->
            <property name="immutable" value="false"/>


            <!-- 是否對類CHAR型別的列的資料進行trim操作 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!--Mapper對映檔案生成所在的目錄 為每一個資料庫的表生成對應的SqlMap檔案 -->
        <sqlMapGenerator targetPackage="sqlMapper.xml檔案生成位置" targetProject="src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>


        <!-- 客戶端程式碼,生成易於使用的針對Model物件和XML配置檔案 的程式碼
                type="ANNOTATEDMAPPER",生成Java Model 和基於註解的Mapper物件
                type="MIXEDMAPPER",生成基於註解的Java Model 和相應的Mapper物件
                type="XMLMAPPER",生成SQLMap XML檔案和獨立的Mapper介面
        -->
        <javaClientGenerator targetPackage="dao類生成位置" targetProject="src/main/java" type="GENERIC-SI">
            <property name="enableSubPackages" value=""/>
            <!--
                    定義Maper.java 原始碼中的ByExample() 方法的可視性,可選的值有:
                    public;
                    private;
                    protected;
                    default
                    注意:如果 targetRuntime="MyBatis3",此引數被忽略
             	-->
            <property name="exampleMethodVisibility" value=""/>
            <!--
                                           	方法名計數器
              	Important note: this property is ignored if the target runtime is MyBatis3.
             	-->
            <property name="methodNameCalculator" value=""/>

            <!--
                                                為生成的介面新增父介面
             	-->
            <property name="rootInterface" value=""/>

        </javaClientGenerator>


        <table tableName="表名" schema="" />

            <!-- optional   , only for mybatis3 runtime
                 	自動生成的鍵值(identity,或者序列值)
               	如果指定此元素,MBG將會生成<selectKey>元素,然後將此元素插入到SQL Map的<insert> 元素之中
               	sqlStatement 的語句將會返回新的值
               	如果是一個自增主鍵的話,你可以使用預定義的語句,或者新增自定義的SQL語句. 預定義的值如下:
                  	Cloudscape 	This will translate to: VALUES IDENTITY_VAL_LOCAL()
                  	DB2: 		VALUES IDENTITY_VAL_LOCAL()
                  	DB2_MF:		SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
                  	Derby: 		VALUES IDENTITY_VAL_LOCAL()
                  	HSQLDB: 	CALL IDENTITY()
                  	Informix: 	select dbinfo('sqlca.sqlerrd1') from systables where tabid=1
                  	MySql: 		SELECT LAST_INSERT_ID()
                  	SqlServer: 	SELECT SCOPE_IDENTITY()
                  	SYBASE: 	SELECT @@IDENTITY
                  	JDBC:		This will configure MBG to generate code for MyBatis3 suport of JDBC standard generated keys. This is a database independent method of obtaining the value from identity columns.
                  	identity: 自增主鍵  If true, then the column is flagged as an identity column and the generated <selectKey> element will be placed after the insert (for an identity column). If false, then the generated <selectKey> will be placed before the insert (typically for a sequence).
 				<generatedKey column="" sqlStatement="" identity="" type=""/>
            -->


            <!-- optional.
                    列的命名規則:
                    MBG使用 <columnRenamingRule> 元素在計算列名的對應 名稱之前,先對列名進行重新命名,
                    作用:一般需要對BUSI_CLIENT_NO 前的BUSI_進行過濾
                    支援正在表示式
                     	searchString 表示要被換掉的字串
                     	replaceString 則是要換成的字串,預設情況下為空字串,可選
                <columnRenamingRule searchString="" replaceString=""/>
            -->


            <!-- optional.告訴 MBG 忽略某一列
                    column,需要忽略的列
                    delimitedColumnName:true ,匹配column的值和資料庫列的名稱 大小寫完全匹配,false 忽略大小寫匹配
                    是否限定表的列名,即固定表列在Model中的名稱

                <ignoreColumn column="PLAN_ID"  delimitedColumnName="true" />
            -->


            <!--optional.覆蓋MBG對Model 的生成規則
                 	column: 資料庫的列名
                 	javaType: 對應的Java資料型別的完全限定名
                 	在必要的時候可以覆蓋由JavaTypeResolver計算得到的java資料型別. For some databases, this is necessary to handle "odd" database types (e.g. MySql's unsigned bigint type should be mapped to java.lang.Object).
                 	jdbcType:該列的JDBC資料型別(INTEGER, DECIMAL, NUMERIC, VARCHAR, etc.),該列可以覆蓋由JavaTypeResolver計算得到的Jdbc型別,對某些資料庫而言,對於處理特定的JDBC 驅動癖好 很有必要(e.g. DB2's LONGVARCHAR type should be mapped to VARCHAR for iBATIS).
                 	typeHandler:
 				<columnOverride column="" javaType=""	jdbcType=""	typeHandler=""	delimitedColumnName="" />    -->
          

    </context>
</generatorConfiguration>

最後一行的<columnOverride>標籤的作用是:覆蓋逆向工程生成的資料型別,可以自定義成你想要的資料型別。mybaits同樣可以使用。

pom依賴

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>com.oracle</groupId>
                    <artifactId>ojdbc6</artifactId>
                    <version>11.2.0.2.0</version>
                    <scope>runtime</scope>
                </dependency>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.23</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

加入依賴之後,同樣會在idea相應工程下生成maven的外掛
直接點選即可mybatis-generate即可。
在這裡插入圖片描述

好了,以上就是逆向工程的使用,希望大家多多支援。

相關文章