MyBatisGenerator使用,配置模板

MyBatis逆向工程的使用

通過逆向工程,可以快速的爲已存在的表創建,實體類,xml,接口類

一、快速使用

軟件IDEA,結合Maven插件進行快速使用

Maven依賴

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.43</version>
            </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

在mysql的版本我用的5.1.43

配置模板

創建一個名字爲: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> 
    <properties resource="generator.properties"></properties>
    <context id="default" targetRuntime="MyBatis3" defaultModelType="flat">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--jdbc的數據庫連接 -->
        <jdbcConnection
                driverClass="${jdbc.driverClass}"
                connectionURL="${jdbc.connectionURL}"
                userId="${jdbc.userId}"
                password="${jdbc.password}">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
<!--這裏需要改:targetPackage這個包爲實體bean的包,targetProject地址一般寫到java -->
        <javaModelGenerator targetPackage="com.test.generator.bean"
                            targetProject="E:\untitled\generator\src\main\java">
            <property name="enableSubPackages" value="false"/>
            <property name="constructorBased" value="false"/>
            <property name="trimStrings" value="true"/>
            <property name="immutable" value="false"/>
        </javaModelGenerator>
<!--這裏需要改:targetPackage這個包爲xml映射文件的包,targetProject地址一般寫到java -->
        <sqlMapGenerator targetPackage="com.test.generator.mapper"
                         targetProject="E:\untitled\generator\src\main\java">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
<!--這裏需要改:targetPackage這個包爲接口文件的包,targetProject地址一般寫到java -->
        <javaClientGenerator targetPackage="com.bjpowernode.p2p.model"
                             targetProject="E:\untitled\generator\src\main\java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
<!-- tableName爲表名,domainObjectName爲對應實體bean的類名,domainObjectName可以不寫(下劃線形式的表名,可以生成正確的命名規範,其他方式也沒試),注意命名規範,下面是我的3個測試表-->
       <table tableName="test_app"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="test_group"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="test_node"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

這裏引入了一個屬性文件名稱:generator.properties,代碼如下:

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/test
jdbc.userId=root
jdbc.password=123456

將上述兩個文件修改並複製到,項目resources下,附圖如下:
在這裏插入圖片描述在這裏插入圖片描述
第三步雙擊後,會開始執行
在這裏插入圖片描述
提示成功後,再看一下生成的目錄結構

在這裏插入圖片描述
下面附上一個,自己整理的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>根節點,沒有任何屬性 
* 包含以下子節點,有順序:
    1、<properties> (0個或1個)
    2、<classPathEntry> (0個或多個)
    3、<context> (1個或多個)
-->
<generatorConfiguration> 
<!--
	* <properties>元素可以是0或1
	* 作用:引用外部文件,可以用${property}這種形式引用
	* 屬性:
	    2個,不能同時存在
        resource:指定classpath下的屬性文件,使用類似com/myproject/generatorConfig.properties這樣的屬性值。
        url:可以指定文件系統上的特定位置,例如file:///C:/myfolder/generatorConfig.properties
-->
    <properties resource="generator.properties"></properties>
<!--
	* <classPathEntry>元素可以是0或多個
	* 作用:這個元素的作用是將Generator運行時需要用到的jar包(或zip格式)添加到classpath下。
	* 屬性:
        location:指定jar包地址,使用的是絕對路徑location="E:\mysql\mysql-connector-java-5.1.29.jar"
-->   
	<!--指定mysql數據庫驅動-->
    <classPathEntry location="${jdbc.driverLocation}"/>
<!--
	* <context>元素至少有一個
	* 作用:指定生成一組對象的環境。例如指定要連接的數據庫,要生成對象的類型和要處理的數據庫中的表。
	* 屬性:
        id(必選屬性):唯一確定一個<context>元素
		defaultModelType:這個屬性很重要,取值:conditional、flat、hierarchical		    
		    -conditional:這是默認值,這個模型和下面的hierarchical類似,除了如果那個單獨的類將只包含一個字段,將不會生             成一個單獨的類。 因此,如果一個表的主鍵只有一個字段,那麼不會爲該字段生成單獨的實體類,會將該字             段合併到基本實體類中。
            -flat:該模型爲每一張表只生成一個實體類。這個實體類包含表中的所有字段。這種模型最簡單,推薦使用。
		    -hierarchical:如果表有主鍵,那麼該模型會產生一個單獨的主鍵實體類,如果表還有BLOB字段, 則會爲表生成一個包				含所有BLOB字段的單獨的實體類,然後爲所有其他的字段生成一個單獨的實體類。Generator會在所有生成				的實體類之間維護一個繼承關係。
		targetRuntime:此屬性用於指定生成的代碼的運行時環境。該屬性支持以下可選值			
			-MyBatis3:這是默認值
			-MyBatis3Simple
			-Ibatis2Java2
			-Ibatis2Java5 一般情況下使用默認值即可,有關這些值的具體作用以及區別請查看中文文檔的詳細內容。
		introspectedColumnImpl:該參數可以指定擴展org.mybatis.generator.api.IntrospectedColumn該類的實現類。該屬性的						 作用可以查看擴展MyBatis Generator。
-->
<!-- 
	<context>元素子標籤		
		<property> (0個或多個)
		<plugin> (0個或多個)
		<commentGenerator> (0個或1個)
		<jdbcConnection> (1個)
		<javaTypeResolver> (0個或1個)
		<javaModelGenerator> (1個)
		<sqlMapGenerator> (0個或1個)
		<javaClientGenerator> (0個或1個)
		<table> (1個或多個)
-->
    <context id="default" targetRuntime="MyBatis3" defaultModelType="flat">
<!--
	<property>元素
	屬性:
        autoDelimitKeywords:當表名或者字段名爲SQL關鍵字的時候,可以設置該屬性爲true會自動給表名或字段名添加分隔符。
							在這裏分隔符不能是”,所以應該設置爲反引號
        beginningDelimiter:分隔符設定,例如<property name="beginningDelimiter" value="`"/>
        endingDelimiter:分隔符設定,例如<property name="endingDelimiter" value="`"/>  
        javaFileEncoding:設置要使用的Java文件的編碼,默認使用當前平臺的編碼
        javaFormatter:定製生成的java文件的樣式
        xmlFormatter:定製生成的xml文件的樣式
-->
<!--
	<plugin>元素
	作用:用來定義一個插件,插件用於擴展或修改通過MyBatis Generator代碼生成器生成的代碼。
		  插件將按在配置中配置的順序執行。
-->
<!--
	<commentGenerator>元素
	作用:生成的代碼中是否包含註釋信息,表或字段的備註信息.一般生成的信息沒什麼價值,所以不生成。
	屬性:
		suppressAllComments:阻止生成註釋,默認爲false不阻止
		suppressDate:阻止生成的註釋包含時間戳,默認爲false不阻止
		type:可以指定用戶的實現類該類需要實現org.mybatis.generator.api.CommentGenerator接口。而且必有一個默認的構造		  方法。默認值DEFAULT,使用的實現類org.mybatis.generator.internal.DefaultCommentGenerator。
-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
<!--
	<jdbcConnection>元素
	作用:指定數據庫連接信息,必選,只能有一個。如果jdbc驅動不在classpath下,那麼必須通過上面<classPathEntry>引入
	屬性:		
        driverClass(必選):訪問數據庫的JDBC驅動程序的完全限定類名
        connectionURL(必選):訪問數據庫的JDBC連接URL	
        userId:訪問數據庫的用戶ID
        password:訪問數據庫的密碼
	此外該元素還可以接受多個<property>子元素,這裏配置的<property>屬性都會添加到JDBC驅動的屬性中。
-->
        <!--jdbc的數據庫連接 -->
        <jdbcConnection
                driverClass="${jdbc.driverClass}"
                connectionURL="${jdbc.connectionURL}"
                userId="${jdbc.userId}"
                password="${jdbc.password}">
        </jdbcConnection>
<!-- 
	<javaTypeResolver>元素
	作用:這個元素的配置用來指定JDBC類型和Java類型如何轉換。
	屬性:
		type:默認default,不建議修改
	該屬性還有一個可以配置的<property>元素。該屬性可以控制是否強制DECIMAL和NUMERIC類型的字段轉換爲Java類型的java.math.BigDecimal,默認值爲false,一般不需要配置。
-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
<!-- 
	<javaModelGenerator>元素,該元素必須配置一個,並且最多一個。
	作用:該元素用來控制生成的實體類
	屬性:
        targetPackage:這個包名是,生成實體類bean所在的包
        targetProject:指定目標項目路徑,使用的是文件系統的絕對路徑。
	該元素支持以下幾個<property>子元素屬性:
		constructorBased:該屬性只對MyBatis3有效,如果true就會使用構造方法入參,如果false就會使用setter方式。默認爲					 false。
		enableSubPackages:如果true,會根據catalog和schema來生成子包。如果false就會直接用targetPackage屬性。默認爲					 false。
		immutable:該屬性用來配置實體類屬性是否可變,如果設置爲true,那麼constructorBased不管設置成什麼,都會使用構造			  方法入參,並且不會生成setter方法。如果爲false,實體類屬性就可以改變,會生成getset。默認爲false。
		rootClass:設置所有實體類的基類。如果設置,需要使用類的全限定名稱。並且如果能夠加載rootClass,那麼不會覆蓋和父類中完全匹配的屬性。匹配規則:屬性名完全相同、屬性類型相同、屬性有getter方法、屬性有setter方法
		trimStrings:是否對數據庫查詢結果進行trim操作,默認值爲false不執行。
-->
        <javaModelGenerator targetPackage="com.bjpowernode.p2p.model"
                            targetProject="E://course//projects//idea-work//p2p//exterface//src//main//java">

            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否對model添加 構造函數 true添加,false不添加-->
            <property name="constructorBased" value="false"/>
            <!-- 是否對類CHAR類型的列的數據進行trim操作 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立的Model對象是否 不可改變  即生成的Model對象不會有 setter方法,只有構造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>
<!--
	<sqlMapGenerator>元素,該元素可選,最多配置一個	
	作用:配置需要生成xml文件的地址
    如果<context>屬性:targetRuntime目標是iBATIS2,該元素必須配置一個。
    如果<context>屬性:targetRuntime目標是MyBatis3,只有當<javaClientGenerator>需要XML時,該元素必須配置一個。 如果					沒有配置 <javaClientGenerator>。則使用以下的規則:
				如果指定了一個<sqlMapGenerator>,那麼MBG將只生成XML的SQL映射文件和實體類。
				如果沒有指定<sqlMapGenerator>,那麼MBG將只生成實體類。
	屬性:
	    targetPackage:生成xml映射文件所在的包
		targetProject:指定目標項目路徑,使用的是文件系統的絕對路徑。
	<property>子元素:
		enableSubPackages:如果true,會根據catalog和schema來生成子包。如果false就會直接用targetPackage屬性指定的包。					默認爲false。

-->
        <sqlMapGenerator targetPackage="com.bjpowernode.p2p.model"
                         targetProject="E://course//projects//idea-work//p2p//dataservice//src//main//java">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
<!--
	<javaClientGenerator>元素
	作用:
	屬性:
		implementationPackage:如果指定了該屬性,實現類就會生成在這個包中。
	    targetPackage(必選):生成接口文件所在的包
        targetProject(必選):指定目標項目路徑,使用的是文件系統的絕對路徑。
		type(必選):分成三類:
			MyBatis3:
			    ANNOTATEDMAPPER:基於註解的Mapper接口,不會有對應的XML映射文件
			    MIXEDMAPPER:XML和註解的混合形式,(上面這種情況中的)SqlProvider註解方法會被XML替代。
			    XMLMAPPER:所有的方法都在XML中,接口調用依賴XML文件。
			MyBatis3Simple:
			    ANNOTATEDMAPPER:基於註解的Mapper接口,不會有對應的XML映射文件
			    XMLMAPPER:所有的方法都在XML中,接口調用依賴XML文件。
			Ibatis2Java2或Ibatis2Java5:
			    IBATIS:生成的對象符合iBATIS的DAO框架(不建議使用)。
			    GENERIC-CI:生成的對象將只依賴於SqlMapClient,通過構造方法注入。
			    GENERIC-SI:生成的對象將只依賴於SqlMapClient,通過setter方法注入。
			    SPRING:生成的對象符合Spring的DAO接口
	該元素支持<property>子元素設置的屬性:
		enableSubPackages
		exampleMethodVisibility
		methodNameCalculator
		rootInterface:可以指定一個接口,讓所有生成的接口都繼承這個接口
		useLegacyBuilder

-->
        <javaClientGenerator targetPackage="com.bjpowernode.p2p.model"
                             targetProject="E://course//projects//idea-work//p2p//dataservice//src//main//java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

<!--
	<table>元素
	作用:這裏開始配置,表的相關信息
	屬性:
		tableName(必選):指定要生成的表名,可以使用SQL通配符"%"匹配多個表。
	    schema:數據庫的schema,可以使用SQL通配符匹配。如果設置了該值,生成SQL的表名會變成如schema.tableName的形式。
	    catalog:數據庫的catalog,如果設置了該值,生成SQL的表名會變成如catalog.tableName的形式。
 	    alias:如果指定,這個值會用在生成的select查詢SQL的表的別名和列名上。列名會被別名爲 alias_actualColumnName(別       名_實際列名) 這種模式。
		domainObjectName:生成對象的基本名稱。如果沒有指定,會自動根據表名來生成名稱。駝峯命名法。
		enableXXX:XXX代表多種SQL方法,該屬性用來指定是否生成對應的XXX語句。
		selectByPrimaryKeyQueryId:DBA跟蹤工具會用到,具體請看詳細文檔。
		selectByExampleQueryId:DBA跟蹤工具會用到,具體請看詳細文檔。
		modelType:和<context>的defaultModelType含義一樣,這裏可以針對表進行配置,這裏的配置會覆蓋<context>的				defaultModelType配置。
		escapeWildcards:這個屬性表示當查詢列,是否對schema和表名中的SQL通配符 ('_' and '%') 進行轉義。 對於某些驅動                當schema或表名中包含SQL通配符時(例如,一個表名是MY_TABLE,有一些驅動需要將下劃線進行轉義)是                必須的。默認值 是false。
		delimitIdentifiers:是否給標識符增加分隔符。默認false。當catalog,schema或tableName中包含空白時,默認爲true。
		delimitAllColumns:是否對所有列添加分隔符。默認false。
	該元素還有<property>元素和子元素。具體的看,文章最後的參考鏈接。裏面有更詳細的介紹。
	介紹一個<property>元素的屬性:
		modelOnly:此屬性用於配置是否爲表只生成實體類。如果設置爲true就不會有Mapper接口。如果配置了							<sqlMapGenerator>,並且modelOnly爲true,那麼XML映射文件中只有實體對象的映射元素(<resultMap>)。如果爲			true還會覆蓋屬性中的enableXXX方法,將不會生成任何CRUD方法。
-->
        <table tableName="b_loan_info" domainObjectName="LoanInfo"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>

        <table tableName="u_user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="u_finance_account" domainObjectName="FinanceAccount"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="b_bid_info" domainObjectName="BidInfo"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="b_income_record" domainObjectName="IncomeRecord"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="b_recharge_record" domainObjectName="RechargeRecord"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

參考地址:https://gitee.com/free/Mybatis_Utils/blob/master/MybatisGeneator/MybatisGeneator.md

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