1. 程式人生 > >Maven整合外掛mybatis-generator(mybatis自動生成實體程式碼的外掛)使用

Maven整合外掛mybatis-generator(mybatis自動生成實體程式碼的外掛)使用

mybatis-generator這個外掛有什麼用處

這個外掛是通過連線資料庫,根據資料庫中的表來自動生成model、資料庫控制層介面以及對應的xml檔案的一個外掛

怎麼使用這個外掛

現在來談談怎麼使用這個外掛,既然式maven下的外掛,所以第一步先建立一個maven的專案,然後再pom檔案裡的build標籤下的plugins標籤下加上這個外掛的內容

注意:要在這個這外掛下加上MySQL的驅動和mybatis的依賴,不然等會去生成程式碼的時候會報找不到對應操作的錯誤,這裡的log4j外掛可加可不加,不影響最後的結果。如果在這裡不加入對應的依賴,也可以單獨建立一個配置檔案來指定本地的這些jar包的位置,這個稍後再介紹

然後第二步新增一個generatorConfig.xml的檔案放在maven專案的resource資料夾下

然後講解下里面一些常用的標籤以及這些標籤一些常用的屬性
官網地址:http://www.mybatis.org/generator/configreference/commentGenerator.html

1)generatorConfiguration這個屬性,顧名思義,這個就是這個外掛的配置內容標籤了
2)context:元素用於指定生成一組物件的環境。 子元素用於指定要連線的資料庫,要生成的物件型別以及要內省的表。 可以在元素內列出多個元素,以允許在MyBatis Generator(MBG)的同一執行中生成來自不同資料庫或具有不同生成引數的物件。
常用屬性:
id

: 這個context唯一的標識,在一些報錯資訊上會用到;
defaultModelType:此屬性用於設定生成的模型型別的預設值。 模型型別定義MBG將如何生成域類。 對於某些模型型別,MBG將為每個表生成單個域類,而其他MBG可能會根據表的結構生成不同的類。 該屬性支援以下值:
conditional:
這是預設值
此模型類似於層次模型,只是如果該單獨的類只包含一個欄位,則不會生成單獨的類。 因此,如果表只有一個主鍵欄位,該欄位將合併到基本記錄類中。

flat:
此模型僅為任何表生成一個域類。 該類將儲存表中的所有欄位。

hierarchical:
如果表具有主鍵,則此模型將生成主鍵類,另一個類包含表中的任何BLOB列,另一個類包含其餘欄位。 類之間存在適當的繼承關係。

targetRuntime:這個屬性是指生成程式碼時執行的外掛,比如mybatis3,ibatis等,常用的值有:MyBatis3、MyBatis3Simple、MyBatis3DynamicSql、Ibatis2Java2、Ibatis2Java5

3)commentGenerator:元素用於定義Comment Generator的屬性。 Comment Generator用於為MyBatis Generator(MBG)生成的各種元素生成註釋(Java欄位,Java方法,XML元素等)。 預設的Comment Generator將JavaDoc註釋新增到所有生成的Java元素,以在Eclipse外掛中啟用Java合併功能。 此外,還會為每個生成的XML元素添加註釋。 評論的目的還在於告知使用者元素已生成並且可以重新生成(即 - 不應更改它們)。 此元素是元素的可選子元素。
預設實現是org.mybatis.generator.internal.DefaultCommentGenerator。 如果您只想修改某些行為,則預設實現是為可擴充套件性而設計的。

常用屬性:
suppressAllComments:此屬性用於指定MBG是否將在生成的程式碼中包含任何coments;預設值是false,當屬性為false或未指定時,所有生成的元素都將包含指示元素是生成元素的註釋。為true時不生成對應的註釋

suppressDate:此屬性用於指定MBG是否將在生成的註釋中包含生成時間戳。預設值是false,當該屬性的值為false或未設定時,預設生成的註釋會生成時間戳.當值為true時生成的註釋不加時間戳。

4)jdbcConnection:元素用於指定內省表所需的資料庫連線的屬性。 MyBatis Generator使用JDBC的DatabaseMetaData類來發現您在配置中指定的表的屬性。 每個元素都需要一個或元素。

常用屬性:
driverClass:資料庫連線驅動類
connectionURL:資料庫連線地址
注意:當資料庫連線地址的URL中有& 符號的時候,需要用&替代轉義
userId:資料庫使用者名稱
password:連線密碼

5)javaTypeResolver:元素用於定義Java型別解析器的屬性。 Java Type Resolver用於根據資料庫列資訊計算Java型別。 如果可能的話,預設的Java Type Resolver嘗試通過替換Integral型別(Long,Integer,Short等)來嘗試使JDBC DECIMAL和NUMERIC型別更容易使用。如果不希望出現這種情況,請將屬性“forceBigDecimals”設定為“true”。 如果您想要與預設行為不同的行為,也可以替換自己的實現。 此元素是元素的可選子元素。

6)javaModelGenerator:元素用於定義Java模型生成器的屬性。 Java模型生成器構建與內省表匹配的主鍵類,記錄類和Query by Example類。 此元素是元素的必需子元素。

常用屬性:
constructorBased:此屬性用於選擇MyBatis Generator是否將為接受類中每個欄位的值的類生成建構函式。 此外,將構建SQL結果對映以使用建構函式而不是每個欄位的“setter”。
此屬性僅適用於MyBatis3,iBATIS2將被忽略。
如果“immutable”屬性設定為“true”,則忽略此屬性(並強制為“true”)。

元素中的相應屬性可以覆蓋此屬性。
預設值為false。

 

enableSubPackages:此屬性用於選擇MyBatis Generator是否將根據內省表的目錄和架構為物件生成不同的Java包。
例如,假設模式MYSCHMA中的表為MYTABLE。 還假設targetPackage屬性設定為“com.mycompany”。 如果此屬性為true,則表的生成物件將放在包“com.mycompany.myschema”中。 如果屬性為false,則生成的物件將放在“com.mycompany”架構中。
預設值為false。

immutable:此屬性用於選擇MyBatis Generator是否將生成不可變模型類 - 這意味著類將不具有“setter”方法,並且建構函式將接受類中每個欄位的值。
如果為true,則強制使用引數化建構函式構建模型類,而不管“constructorBased”屬性的值如何。
此屬性僅適用於MyBatis3,iBATIS2將被忽略。

元素中的相應屬性可以覆蓋此屬性。
預設值為false。

 

trimStrings:此屬性用於選擇MyBatis Generator是否新增程式碼以從資料庫返回的字元欄位中修剪空白區域。 如果資料庫將資料儲存在CHAR欄位而不是VARCHAR欄位中,則此選項非常有用。 如果為true,MyBatis Generator將插入程式碼以修剪字元欄位。 可以使用

或元素中的trimStrings屬性覆蓋。
預設值為false。

 

7)sqlMapGenerator:元素用於定義SQL對映生成器的屬性。 SQL Map Generator為每個內省表構建一個MyBatis / iBATIS格式的SQL對映XML檔案。

如果定位了iBATIS2,則此元素是元素的必需子元素。

如果MyBatis3是目標,那麼只有當您選擇的javaClientGenerator需要XML時,此元素才是元素的必需子元素。
如果未指定javaClientGenerator,則適用以下規則:
如果指定sqlMapGenerator,則MBG將僅生成SQL對映XML檔案和模型classess。
如果未指定sqlMapGenerator,則MBG將僅生成模型類。
常用屬性:
targetPackage:這是將放置生成的SQL Maps的包。 在預設生成器中,屬性“enableSubPackages”控制實際包的計算方式。 如果為true,則計算的包將是targetPackage加上表的目錄和模式的子包(如果存在)。 如果為false(預設值),則計算的包將完全是targetPackage屬性中指定的包。 MyBatis Generator(MBG)將根據生成的包建立資料夾。

targetProject:這用於為生成的SQL對映指定目標專案。 在Eclipse環境中執行時,它指定將儲存物件的專案和原始檔夾。 在其他環境中,此值應該是本地檔案系統上的現有目錄。 如果該目錄不存在,MBG將不會建立該目錄。

enableSubPackages:此屬性用於選擇MBG是否將根據內省表的目錄和架構為物件生成不同的Java包。
例如,假設模式MYSCHMA中的表為MYTABLE。 還假設targetPackage屬性設定為“com.mycompany”。 如果此屬性為true,則表的生成的SQL Map將放在包“com.mycompany.myschema”中。 如果屬性為false,則生成的SQL Map將放在“com.mycompany”架構中。
預設值為false。

8)javaClientGenerator:元素用於定義Java客戶端生成器的屬性。 Java客戶端生成器構建Java介面和類,允許輕鬆使用生成的Java模型和XML對映檔案。 對於iBATIS2目標環境,這些生成的物件採用DAO介面和實現類的形式。 對於MyBatis,生成的物件採用對映器介面的形式。 此元素是元素的可選子元素。 如果未指定此元素,則MyBatis Generator(MBG)將不會生成Java客戶端介面和類。

常用屬性:
type:此屬性用於選擇一個預定義的Java客戶端生成器,或指定使用者提供的Java客戶端生成器。 任何使用者提供的DAO生成器都必須擴充套件類org.mybatis.generator.codegen.AbstractJavaClientGenerator類,並且必須具有公共預設建構函式。
該屬性接受以下值以選擇其中一個預定義的生成器:
當context標籤的targetRuntime是Mybatis3時,type屬性可以有一下三個值:
XMLMAPPER:生成的物件將是MyBatis 3.x對映器基礎結構的Java介面。 介面將依賴於生成的XML對映器檔案

MIXEDMAPPER:生成的物件將是MyBatis 3.x對映器基礎結構的Java介面。 介面將基於註釋和XML的混合。 將使用註釋將在簡單註釋工作的地方使用。 此客戶端不會生成和Sql Provider,因此所有複雜的動態SQL都將以XML格式生成。
MIXEDMAPPER需要MyBatis 3.0.4或更高版本。

ANNOTATEDMAPPER:生成的物件將是MyBatis 3.x對映器基礎結構的Java介面。 介面將基於註釋和MyBatis 3.x SqlProviders。 不會生成XML對映器檔案。
ANNOTATEDMAPPER需要MyBatis 3.0.4或更高版本。

9)table:

元素用於選擇資料庫中的表以進行內省。 選定的表將導致為每個表生成以下物件:

 

MyBatis / iBATIS格式的SQL Map檔案
一組構成表格“模型”的類,包括:
用於匹配表的主鍵的類(如果表具有主鍵)。
用於匹配表中不在主鍵和非BLOB欄位中的欄位的類。 如果有主鍵,則此類將擴充套件主鍵。
用於儲存表中任何BLOB欄位的類(如果有)。 此類將根據表的配置擴充套件前兩個類中的一個。
一個類,用於在不同的“by example”方法中生成動態where子句(selectByExample,deleteByExample)。
(可選)DAO介面和類
必須至少指定一個

元素作為元素的必需子元素。 您可以指定無限制的表元素。

 

常用屬性:
tableName:資料庫表的名稱(不包括架構或目錄)。 如果需要,指定的值可以包含SQL萬用字元。

schema:資料庫模式 - 如果您的資料庫不使用模式,或者存在預設模式,則不需要。 如果需要,指定的值可以包含SQL萬用字元。

catalog:資料庫目錄 - 如果資料庫不使用目錄,或者存在預設目錄,則不需要。

alias:如果指定,則此值將用於對任何生成的SQL select語句中的表和所有列名稱進行別名。 列名稱將使用模式alias_actualColumnName別名。

domainObjectName:生成物件名稱的基本名稱。 如果未指定,MBG將根據tableName自動生成名稱。 名稱(在此處指定或自動生成)將用於計算生成的域類名稱和DAO類名稱。
您可以在域物件名稱中指定包片段。 例如,如果指定foo.Bar,則域物件將為Bar,並且包foo將附加到生成器配置中指定的目標包。

mapperName :MyBatis3生成的對映器類和XML檔案的名稱。 如果未指定,則名稱將是域物件名稱,加上單詞“Mapper”。
您可以在對映器名稱中指定包片段。 例如,如果指定foo.BarMapper,則對映器將為BarMapper,並且包foo將附加到生成器配置中指定的目標包。
自版本1.3.4

sqlProviderName:MyBatis3生成的SQL提供程式類的名稱(可能會也可能不會根據配置生成)。 如果未指定,則名稱將是域物件名稱,加上單詞“SqlProvider”。
您可以在SQL提供程式名稱中指定程式包片段。 例如,如果指定foo.BarSqlProvider,則SQL提供程式將為BarSqlProvider,並且包foo將附加到生成器配置中指定的目標程式包。
自版本1.3.4

enableInsert:表示是否應生成插入語句。
預設值為true。

enableSelectByPrimaryKey:表示是否應生成select by primary key語句。 無論此設定如何,如果表沒有主鍵,則不會生成語句。
預設值為true。

enableSelectByExample:表示是否應生成select by example語句。 此語句允許在執行時生成許多不同的動態查詢。
預設值為true。

enableUpdateByPrimaryKey:表示是否應生成主鍵語句更新。 無論此設定如何,如果表沒有主鍵,則不會生成語句。
預設值為true。

enableDeleteByPrimaryKey:表示是否應生成主鍵語句刪除。 無論此設定如何,如果表沒有主鍵,則不會生成語句。
預設值為true。

enableDeleteByExample:表示是否應生成按示例刪除語句。 此語句允許在執行時生成許多不同的動態刪除。
預設值為true。

enableCountByExample:表示是否應生成按語句計數的語句。 此語句將返回表中與示例匹配的行數。
預設值為true。

enableUpdateByExample:表示是否應生成示例語句的更新。 此語句將更新表中與示例匹配的行。 如果為true,則還將生成示例“selective”語句的更新。 “selective”語句僅更新record引數中的相應值為非null的列。
預設值為true。

selectByPrimaryKeyQueryId:此值將以此形式新增到select by primary key語句的選擇列表中:“''作為QUERYID”。 這對於在執行時識別DBA跟蹤工具中的查詢非常有用。 如果使用這樣的值,則應為MBG生成的每個不同查詢指定唯一ID。

selectByExampleQueryId:此值將以此形式新增到select by example語句的選擇列表中:“''作為QUERYID”。 這對於在執行時識別DBA跟蹤工具中的查詢非常有用。 如果使用這樣的值,則應為MBG生成的每個不同查詢指定唯一ID。

怎麼生成對應程式碼?

想在對應的資料庫新建一張表,然後在編輯器中進行以下操作:

然後就可以去配置檔案裡對應的包的位置檢視生成的程式碼了