1. 程式人生 > >MyBatis Generator(MBG)的簡單使用

MyBatis Generator(MBG)的簡單使用

Hibernate根據寫好的pojo啟動伺服器會自動幫助我們生成對應的資料表。

MBG根據表幫我們自動生成介面、pojo類和xml這些檔案。一般根據MyBatis GeneratorXML配置檔案設定生成簡單的CRUD,有關關聯的操作推薦我們自己新增。

 

mybatis工具github網址:https://github.com/mybatis

MyBatis Generator(MBG)官方文件:http://www.mybatis.org/generator/

 

新建一個maven web專案

1、pom.xml引出 mybatis-generator 依賴

<!-- mybatis-generator -->
		<dependency>
		    <groupId>org.mybatis.generator</groupId>
		    <artifactId>mybatis-generator-core</artifactId>
		    <version>1.3.7</version>
		</dependency>

2、新建MyBatis GeneratorXML配置檔案:自定義檔名 mbgconfig.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>

    <!--targetRuntime用MyBatis3, 也就是預設的-->
    <context id="mysqlTables" targetRuntime="MyBatis3">

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

        <!--基礎的資料庫連線-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatis_demo?allowMultiQueries=true"
                        userId="root"
                        password="123456">
        </jdbcConnection>

        <!--Java型別解析器, 目前也就只有forceBigDecimals-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- Domain生成器,即java實體類 -->
        <javaModelGenerator targetPackage="cn.jq.mybatis.model" targetProject=".\src\main\java">
            <!--據說可以自動新增schema名-->
            <property name="enableSubPackages" value="true"/>
            <!--當遇到String的時候setter是否會先trim()-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!--Mapping生成器,即生成的 Mapper.xml 檔案位置-->
        <sqlMapGenerator targetPackage="cn.jq.mybatis.dao" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!--Mapper生成器, 即生成的 Mapper 介面類,當type為ANNOTATEDMAPPER時是帶有@annotation的Mapper, MIXEDMAPPER是XML檔案-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="cn.jq.mybatis.dao" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!--欄位命名策略過程: table標籤對應資料庫中的table表-->
        <table tableName="t_user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="t_role" domainObjectName="Role"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>

    </context>
</generatorConfiguration>

3、測試執行生成介面、pojo類和xml這些檔案

 參考官方文件:http://www.mybatis.org/generator/running/runningWithJava.html

	@Test
	public void runmbg() throws Exception {
		List<String> warnings = new ArrayList<String>();
		   boolean overwrite = true;
		   String path = this.getClass().getClassLoader().getResource("mbgconfig.xml").getPath();
		   File configFile = new File(path);
		   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);
	}

生成簡單的CRUDmpper的介面(複雜的方法推薦自己寫),生成的mapper.xml 書寫很規範,多多參考規範。

 

一個較為完整的mbgconfig.xml示例, 儲存下來按需修改

配置檔案詳解參考文章:https://blog.csdn.net/s0009527/article/details/78083763

<?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>

    <!-- 資料庫的驅動, JAR/ZIP檔案的全路徑,maven工程,驅動已經依賴了,沒用-->
    <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip"/>

    <!--targetRuntime用MyBatis3, 也就是預設的-->
    <context id="DB2Tables" targetRuntime="MyBatis3">

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

        <!--基礎的資料庫連線-->
        <jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
                        connectionURL="jdbc:db2:TEST"
                        userId="db2admin"
                        password="db2admin">
        </jdbcConnection>

        <!--Java型別解析器, 目前也就只有forceBigDecimals-->
        <javaTypeResolver>
            <!--當資料型別為DECIMAL或者NUMERIC的時候, 如果是true的話則總是使用java.math.BigDecimal-->
            <!--以下是false, 即預設值的情況-->
            <!--如果有小數或者decimal長度大於18, Java型別為BigDecimal-->
            <!--如果沒有小數, 以及decimal長度為10至18, Java型別為Long-->
            <!--如果沒有小數, 以及decimal長度為5至9, Java型別為Integer-->
            <!--如果沒有小數, 以及decimal長度少於5, Java型別為Short-->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!--Domain生成器-->
        <javaModelGenerator targetPackage="test.model" targetProject=".\src\main\java">
            <!--據說可以自動新增schema名, 可是我沒用到過-->
            <property name="enableSubPackages" value="true"/>

            <!--生成全屬性構造器, 沒什麼用, 如果有指定immutable元素的話這個會被忽略-->
            <property name="constructorBased" value="true"/>

            <!--生成不可變的domain, 這個我也很少用-->
            <property name="immutable" value="true"/>

            <!--每個Domain都繼承這個bean-->
            <property name="rootClass" value="com.github.prontera.domain.base.BasicEntity"/>

            <!--當遇到String的時候setter是否會先trim()-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!--Mapping生成器-->
        <sqlMapGenerator targetPackage="test.xml" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!--Mapper生成器, 當type為ANNOTATEDMAPPER時是帶有@annotation的Mapper, MIXEDMAPPER是XML檔案-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true"/>

            <!--每個Mapper所繼承的介面-->
            <property name="rootInterface" value="com.github.prontera.Mapper"/>
        </javaClientGenerator>

        <!--欄位命名策略過程: <columnRenamingRule> >> property name="useActualColumnNames"-->
        <!--alias屬性是個神器, 會為所有SQL都新增, 做關聯的時候就非常方便了-->
        <!--至於什麼Example, 全關了就是-->
        <table alias="ha" tableName="ALLTYPES" domainObjectName="Customer"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">

            <!--指定是否用資料庫中真實的欄位名, 而不是採用MBG轉換後的駝峰-->
            <property name="useActualColumnNames" value="true"/>

            <!--自動整合改類-->
            <property name="rootClass" value="com.github.prontera.domain.base.HelloBasicClass"/>

            <!--Mapper自動繼承的介面-->
            <property name="rootInterface" value="com.github.prontera.Mapper"/>

            <!--當遇到String的時候setter是否會先trim()-->
            <property name="trimStrings" value="true"/>

            <!--先進行columnRenamingRule, 再進行useActualColumnNames. 如果有columnOverride則忽略該配置-->
  <!--關於columnRenamingRule的具體例子 http://www.mybatis.org/generator/configreference/columnRenamingRule.html-->
            <columnRenamingRule searchString="^CUST_"      replaceString=""/>

            <!--顧名思義, 忽略某些列-->
            <ignoreColumn column="CREATE_TIME"/>

            <!--也是忽略資料列, 但是可以通過正則表示式, except子元素是可選的, 代表忽略除UPDATE_TIME外的列-->
            <ignoreColumnsByRegex pattern=".*_TIME$">
                <except column="UPDATE_TIME"/>
            </ignoreColumnsByRegex>
        </table>

    </context>
</generatorConfiguration>