mybatis-generator插件的用法介紹

mybatis-generator是一款在使用mybatis框架時,根據我們的數據庫表,自動生成對應model,dao和mapper的工具,很大程度上減少了業務開發人員的手動編碼時間,接下來我們來了解它的用法。

在pom.xml中添加插件

<plugins>
	<plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.7</version>
        <configuration>
            <!--配置文件存放的位置,一般不用配置,它會自動到這個位置去尋找-->
            <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
            <!--是否覆蓋,新生成的mapper接口\java類\mapper文件會覆蓋老的-->
            <overwrite>true</overwrite>
         </configuration>
     </plugin>   
</plugins>

配置generatorConfig.xml文件

  • 只需要把generatorConfig.xml放在maven工程的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">

<generatorConfiguration>
    <!-- 在MBG工作的時候,需要額外加載的依賴包
       location屬性指明加載jar/zip包的全路徑,注意版本-->
    <classPathEntry location="C:\Users\L7832\Desktop\project\mysql-connector-java-8.0.17.jar" />

    <context id="DB2Tables" targetRuntime="MyBatis3">

        <!--不再追加xml內容,我們在插件中設置了新生成的mapper接口\java類\mapper文件會覆蓋老的,
        但是我們發現mapper.xml文件並不是覆蓋,而是追加 。因爲只有加了下面這個插件後才能覆蓋-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />

        <!--當suppressAllComments設置爲true的時候,生成的文件中就不會有註解了,使得代碼更清爽-->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!-- 必須要有的,使用這個配置鏈接數據庫-->
       <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                       connectionURL="jdbc:mysql://127.0.0.1:3306/mall?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false"
                       userId="root"
                       password="4589856">
           <!--解決mysql8.x驅動會生成用戶下多個庫下表的問題,true表示只生成connectionURL指定數據庫下的表,而不是userId用戶能看到的所有數據庫中同名的表。
           例如:root用戶下有db1和db2兩個數據庫,這兩個庫中都有tb_user表,當nullCatalogMeansCurrent設置爲false時,
           儘管connectionURL指定的是db1數據庫,但是db2數據庫中的tb_user表同樣也會生成對應的實體類-->
           <property name="nullCatalogMeansCurrent" value="true"/>
       </jdbcConnection>

        <!-- java類型處理器
            用於處理DB中的類型到Java中的類型,默認使用JavaTypeResolverDefaultImpl;
            注意一點,默認會先嚐試使用Integer,Long,Short等來對應DECIMAL和 NUMERIC數據類型;
        -->
       <javaTypeResolver >
           <!--
                true:使用BigDecimal對應DECIMAL和 NUMERIC數據類型
                false:默認,
                    scale>0;length>18:使用BigDecimal;
                    scale=0;length[10,18]:使用Long;
                    scale=0;length[5,9]:使用Integer;
                    scale=0;length<5:使用Short;
             -->
           <property name="forceBigDecimals" value="false" />
       </javaTypeResolver>

        <!-- java模型創建器,是必須要的元素(創建java類)
            targetPackage:生成的類要放的包,真實的包受enableSubPackages屬性控制;
            targetProject:目標項目,指定一個存在的目錄下,生成的內容會放到指定目錄中,如果目錄不存在,MBG不會自動建目錄(不用改)
            targetProject/targetPackage就是我們要生成的java類放在哪個目錄下(src/main/java/com.lxc.mall.pojo)
         -->
       <javaModelGenerator targetPackage="com.lxc.mall.pojo" targetProject="src/main/java">
           <!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認爲false -->
           <property name="enableSubPackages" value="true" />
           <!--因爲我一般使用Lombok來生成getter\setter,所以不要這個設置-->
           <!-- 設置是否在getter方法中,對String類型字段調用trim()方法 -->
           <!--<property name="trimStrings" value="true" />-->
        </javaModelGenerator>


        <!-- 生成SQL map的XML文件生成器(創建mapper文件)
            targetPackage/targetProject就是我們要生成的mapper文件放在哪個目錄下(src/main/resources/mapper)
         -->
        <sqlMapGenerator targetPackage="mapper"  targetProject="src/main/resources">
            <!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認爲false -->
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>


        <!-- 生成Mapper接口,注意,如果沒有配置該元素,那麼默認不會生成Mapper接口
            targetPackage/targetProject:同javaModelGenerator
            type:選擇怎麼生成mapper接口(在MyBatis3/MyBatis3Simple下):
                1,ANNOTATEDMAPPER:會生成使用Mapper接口+Annotation的方式創建(SQL生成在annotation中),不會生成對應的XML;
                2,MIXEDMAPPER:使用混合配置,會生成Mapper接口,並適當添加合適的Annotation,但是XML會生成在XML中;
                3,XMLMAPPER:會生成Mapper接口,接口完全依賴XML;
            注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
        -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.lxc.mall.dao"  targetProject="src/main/java">
            <!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認爲false -->
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- tableName:數據表名字  domainObjectName:java類名 enable***ByExample:這些都是生成跟分頁有關的東西,我們不需要自動生成這些,把這4個屬性設置爲false-->
        <table tableName="mall_shipping" domainObjectName="Shipping" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false">
        	<!--這個字段在數據庫中是text類型,我們必須爲它重新設置類型,才能使數據庫中字段都映射生成在一個pojo類中-->
			<columnOverride column="detail" jdbcType="VARCHAR" />        
        </table>

    </context>
</generatorConfiguration>

這裏只羅列了日常使用的配置,其實只要這些也足夠。詳細配置參考Mybatis Generator最完整配置詳解

使用命令執行插件

在項目根目錄下執行mvn mybatis-generator:generate命令,這個命令可以在cmd中執行,也可以直接在IDEA的Terminal窗口中執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章