ibatis mysql 配置文件详解_MyBatis Generator 配置文件详解
MyBatis Generator (MBG) 是由一個XML配置文件驅動的。這個配置文件中會聲明以下內容:
如何連接數據庫
要生成什么對象,以及如何生成它們
哪些表需要應用于對象生成。
根元素 generatorConfiguration 和 DOCTYPE 信息
generatorConfiguration 元素是配置文件的根元素。該元素沒有任何屬性,但下面包含以下子元素。
properties (0個或1個)
classPathEntry (0個或多個)
context (1個或多個)
注:MyBatis Generator 文件需要包含內容如下的 DOCTYPE 信息:
" - // mybatis.org//DTD MyBatis Generator Configuration 1.0 // EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
classPathEntry
classPathEntry 元素用于將一個path添加到MBG運行時的classpath中。classPathEntry元素是generatorConfiguration元素的可選子元素。如果配置了這個元素,MBG在以下情況下會從這個path下加載類庫:
當加載 JDBC 驅動內省數據庫時
當加載根類中的 JavaModelGenerator 檢查重寫的方法時
這個元素是可選的,而且如果您給MGB安裝了類路徑,您就不需要這個元素(例如 使用java命令時使用參數-cp)。
注意:在加載MBG的擴展類,或者是實現了MBG接口的類時,不會從這個參數所指定的路徑下加載。這種情況必須使用外部類加載方法(如java命令的 -pc參數)進行加載。
重要說明
classPathEntry只在下面這兩種情況下才有效:
當加載 JDBC 驅動內省數據庫時
當加載根類中的 JavaModelGenerator 檢查重寫的方法時
因此,如果你需要加載其他用途的jar包,classPathEntry起不到作用,不能這么寫,解決的辦法就是將你用的jar包添加到類路徑中,在Eclipse等IDE中運行的時候,添加jar包比較容易。當從命令行執行的時候,需要用java -cp xx.jar,xx2.jar xxxMainClass這種方式在-cp后面指定來使用(注意-jar會導致-cp無效)。
必填屬性 location
要添加到classpath中的 JAR/ZIP 文件的完整路徑名稱或要添加到類路徑中的目錄。
properties
properties 元素用于指定一個存儲了外部配置信息的、符合java屬性文件格式的"配置文件"。在“MyBatis Generator 配置文件”中可以使用${property} 的形式獲取該"配置文件"中的值。如果在“配置文件”中所指定的屬性與系統屬性之間存在名稱沖突,則以系統屬性優先。
properties 元素是 generatorConfiguration元素的子元素。
必填屬性
下面表格中的兩個屬性,在properties元素中需要且僅需要有一個。
屬性
描述
resource
屬性文件的限定名稱。當指定此屬性時,會搜索類路徑以查找屬性文件。因此當此屬性指定為com/myproject/generatorConfig.properties時 則在com.myproject包中必須存在名為generatorConfig.properties 的文件。
url
屬性文件的URL。使用此屬可以在文件系統中指定屬性文件file:///C:/myfolder/generatorConfig.properties。
context
context 元素用于指定生成一組對象的上下文環境。它包括很多子元素(后面會一一介紹),這些子元素有些用于指定數據庫連接,有些用于指定要生成對象的類型,還有些用于指定需要內省的表。
context 元素是generatorConfiguration的子元素,一個generatorConfiguration元素可以包含多個context元素,但最少需要包含一個context元素。第一個context 元素代表一個生成對象的上下文。
必填屬性 id
id屬性是必需的,用于指定當前上下文的唯一標識。在錯誤信息的顯示時,會用到這個id屬性的值。
可選屬性 defaultModelType
該屬性用于為生成的模型類型設置默認值。模型類型定義了MBG如何生成domain類。對于某些模型類型,MBG將為每個表生成一個單獨的domain類,其他類型的MBG可能會根據表的結構生成幾個不同的類。該屬性支持的值如下:
conditional : 此值為defaultModelType屬性的默認值。這個類型的model 與 hierarchical 類型的 model 類似,唯一的區別在于 如果分離出來的“主鍵類”中只有一個字段則不會生成單獨的“主鍵類”。所以如果一個表只有一個主鍵字段,則會把這個主鍵合并到 基本記錄 類中。
flat :這種類型的model會為每個表生成唯一的一個類,這個類中會包含表中所有的字段。
hierarchical :這種類型的model 會為包含主鍵的表單獨生成一個主鍵類,并為包含BLOB類型的表中所有BLOB類型字段生成一個類,其他所有字段再單獨生成一個類。這些類之間會生成對應的繼承關系。
可選屬性defaultModelType 的 默認值為 conditional。
可選屬性 targetRuntime
targetRuntime屬性用于指定生成代碼的運行時環境。該屬性支持以下值:
MyBatis3 :此值為targetRuntime屬性的默認值。使用這個值,MBG將生成與 “Mybatis v3.0及以上版本 和 JSE 5.0 及以上版本”相兼容的對象(例如,Java模型和映射器接口將使用泛型類型)。在這些生成的對象中,"by example" 方法支持幾乎所有的動態子句。此外,使用這些生成的java對象還支持 JSE 5.0特性,包括泛型和注解。
MyBatis3Simple:使用這個值,MBG將生成與 “Mybatis v3.0 及以上版本 和 JSE 5.0 及以上版本”相兼容的對象(例如,Java模型和映射器接口將使用泛型類型,接口中將使用默認方法等)。不同的是,使用這個targetRuntime生成的映射器是非常基本的CRUD操作,沒有“by example”方法,僅支持很少的動態SQL。使用這些生成的java對象支持 JSE 5.0特性,包括泛型和注解。
MyBatis3DynamicSql:使用這個值,MBG將生成與 “Mybatis v3.4.2 及以上版本 和 Java 8 及以上版本”相兼容的對象(例如,Java模型和映射器接口將使用泛型類型)。targetRuntime使用此值時,還有以下內容需要注意:
無論為“defaultModelType”指定什么,model對象都以“flat”模式生成。這也意味著沒有“with BLOBs”和“without BLOBs”方法。
不管為的“type”指定為什么,映射器都會生成為帶注解的映射器。
不會生成XML。不是必需的,如果指定將被忽略。
MyBatis Dynamic SQL以“per query”方式支持表別名,而不是“all or nothing”方式。出于這個原因,配置的表別名被忽略。
使用MyBatis3DynamicSql 生成的Java代碼依賴于“MyBatis Dynamic SQL”支持庫。
Ibatis2Java2: 已經過時了,不做介紹
Ibatis2Java5: 已經過時了,不做介紹
可選屬性 targetRuntime 的默認值是 MyBatis3。
如果你想創建一個自己的代碼生成器,你的類需要繼承org.mybatis.generator.api.IntrospectedTable。然后使用這個值指定類的完全限定名稱。這樣你就可以把自己的代碼生成器插入到代碼生成引擎中。
可選屬性 introspectedColumnImpl
使用此值可指定一個繼承自org.mybatis.generator.api.IntrospectedColumn的類的完全限定名稱。如果您想要在計算列信息時更改代碼生成器的行為,請使用此選項。
子元素
需要注意一下,在context元素中,子元素出現的順序是有要求的。必須按如下順序出現。
property (0個或多個)
plugin (0個或多個)
commentGenerator (0個或1個)
connectionFactory (connectionFactory 或jdbcConnection 必有其一)
jdbcConnection (connectionFactory 或jdbcConnection 必有其一)
javaTypeResolver (0個或1個)
javaModelGenerator (1個必填)
sqlMapGenerator (0個或1個)
javaClientGenerator (0個或1個)
table (1個或多個)
支持的屬性
下表列出了在context元素下支持的使用property子元素指定的屬性。
屬性名稱
屬性值
autoDelimitKeywords
如果為true,那么MBG將分隔SQL關鍵字(如果它們用作表中的列名稱)。MBG為許多不同的數據庫維護一個SQL關鍵字列表(可能并不全)。如果某個關鍵字不在MBG的列表中,則可以強制使用進行分隔 。
有關 MBG識別的關鍵字列表,請參閱org.mybatis.generator.internal.db.SqlReservedWords類的源代碼 。
默認值是false。
beginningDelimiter
分隔符的起始字符。如果標識符包含空格,MBG將自動分隔SQL標識符。如果在
endingDelimiter
分隔符的結束字符。如果標識符包含空格,MBG將自動分隔SQL標識符。如果在
javaFileEncoding
使用此屬性可指定生成Java文件的編碼。新生成的Java文件將以此編碼寫入文件系統,并在執行合并時使用此編碼讀取現有的Java文件。如果未指定,則將使用平臺默認編碼。有關有效編碼的信息,請參閱java.nio.charset.Charset。
javaFormatter
使用此屬性來指定生成Java文件所使用formater的完整類名。該類必須實現org.mybatis.generator.api.JavaFormatter, 并且必須有一個默認(無參數)構造函數。每個context元素都包含Java格式化程序的單個實例。默認的Java格式化程序是 org.mybatis.generator.api.dom.DefaultJavaFormatter。默認格式化程序使用內置于Java DOM類中的格式。
xmlFormatter
使用此屬性來指定生成XML文件所使用formater的完整類名。該類必須實現org.mybatis.generator.api.XmlFormatter, 并且必須有一個默認(無參數)構造函數。每個context元素包含XML格式化程序的單個實例。默認的XML格式化程序是 org.mybatis.generator.api.dom.DefaultXmlFormatter。默認格式化程序使用內置到XML DOM類中的格式。
context 小結
一般情況下,我們使用如下的配置即可:
如果你希望不生成和Example查詢有關的內容,那么可以按照如下進行配置:
使用MyBatis3Simple可以避免在后面的
plugin
該元素可以配置0個或者多個,不受限制。
plugin元素用來定義一個插件。插件用于擴展或修改通過MyBatis Generator (MBG)代碼生成器生成的代碼。
插件將按在配置中配置的順序執行。
必選屬性 type
實現接口org.mybatis.generator.api.Plugin的類的完全限定名的插件。該類必須實現org.mybatis.generator.api.Plugin接口 , 且必須有一個公開默認的構造函數。注意,繼承 org.mybatis.generator.api.PluginAdapter 這個適配器類比實現org.mybatis.generator.api.Plugin接口更容易擴展。
commentGenerator
commentGenerator元素是可選的,并且在context元素中最多只能存在一個。
commentGenerator 元素用于配置注釋生成器的屬性。在MBG中注釋生成器用于生成 Java文件和XML文件中的注釋。默認的注釋生成器將JavaDoc 注釋添加到生成的Java元素和XML元素上。注釋的目的是要告訴用戶這個元素是自動生成的,并且有可能重新生成(也就是說這部分內容不應該被用戶修改)。
默認的實現類是 org.mybatis.generator.internal.DefaultCommentGenerator。
可選屬性 type
指定用戶提供的注釋生成器類。 這個類必須繼承org.mybatis.generator.api.CommentGenerator接口。 而且必須有一個默認的構造函數。 這個屬性接收指定特殊的值 DEFAULT,這將會使用默認的實現類(這和不指定該屬性的效果一樣)。
支持的屬性 property
下表中列出了commentGenerator 元素中可能通過property子元素進行設置的屬性:
屬性名
屬性值
suppressAllComments
這個屬性用來指定MBG生成的代碼中是否包含注釋。 這個屬性有以下可選值:
1. false 這是默認值
當這個屬性是false或者沒有指定時,所有生成的元素都會包含用來說明這是生成元素的注釋。
2. true 當這個屬性是true時,不會往生成的元素中添加任何注釋。
注意:如果您將這個值設為true,那么所有的代碼合并都會被禁用。
suppressDate
這個元素用來指定生成的注釋中是否包含生成的日期。 這個屬性有以下可選值:
1. false 這是默認值
當這個屬性是false或者沒有指定時,所有元素生成注釋時都會帶著生成時間。
2. true 當這個屬性是true時,注釋中不會添加生成時間。
示例
下面這段代碼指定了我們希望生成的注釋中不包含時間戳:
jdbcConnection
jdbcConnection元素用于指定數據庫連接所需的的屬性。 每一個context元都必須有且僅有一個jdbcConnection元素。配置該元素需要注意如果JDBC驅動不在classpath下,就需要通過元素引入jar包,這里推薦將jar包放到classpath下。
該元素有兩個必選屬性:
driverClass:訪問數據庫的JDBC驅動程序的完全限定類名
connectionURL:訪問數據庫的JDBC連接URL
該元素還有兩個可選屬性:
userId:訪問數據庫的用戶ID
password:訪問數據庫的密碼
此外該元素還可以接受多個子元素,配置的屬性都會添加到JDBC驅動的屬性中。
這個元素配置起來最容易,這里舉個簡單例子:
connectionURL="jdbc:mysql://localhost:3306/test"
userId="root"
password="">
javaTypeResolver
該元素是可選的,在context元素中最多可以配置一個。
這個元素的配置用來指定JDBC類型和Java類型之間如何轉換。
該元素提供了一個可選的屬性type,和比較類似,提供了默認的實現DEFAULT,一般情況下使用默認即可,需要特殊處理的情況可以通過其他元素配置來解決,不建議修改該屬性。
javaTypeResolver元素可以包含0個或多個property元素。但目錄僅有一個配置(forceBigDecimals)可用,forceBigDecimals屬性可以控制是否強制DECIMAL和NUMERIC類型的字段轉換為Java類型的java.math.BigDecimal,默認值為false,一般不需要配置。
默認情況下的轉換規則為:
如果精度>0或者長度>18,就會使用java.math.BigDecimal
如果精度=0并且10<=長度<=18,就會使用java.lang.Long
如果精度=0并且5<=長度<=9,就會使用java.lang.Integer
如果精度=0并且長度<5,就會使用java.lang.Short
如果設置為true,那么一定會使用java.math.BigDecimal,配置示例如下:
javaModelGenerator
javaModelGenerator 元素在context元素中必須有、且只能有一個。
該元素用來控制生成的實體類,根據context中配置的defaultModelType,一個表可能會對應生成多個不同的實體類。一個表對應多個類實際上并不方便,所以前面也推薦使用flat,這種情況下一個表對應一個實體類。
該元素只有兩個屬性,都是必選的。
targetPackage:生成實體類存放的包名。一般就是放在該包下,實際還會受到其他配置的影響(
targetProject:指定目標項目路徑,使用的是文件系統的絕對路徑。
javaModelGenerator 元素支持以下幾個property子元素屬性:
constructorBased:該屬性只對MyBatis3有效,如果true就會使用構造方法入參,如果false就會使用setter方式。默認為false。
enableSubPackages:如果true,MBG會根據catalog和schema來生成子包。如果false就會直接用targetPackage屬性。默認為false。
immutable:該屬性用來配置實體類屬性是否可變,如果設置為true,那么constructorBased不管設置成什么,都會使用構造方法入參,并且不會生成setter方法。如果為false,實體類屬性就可以改變。默認為false。
rootClass:設置所有實體類的基類。如果設置,需要使用類的全限定名稱。并且如果MBG能夠加載rootClass,那么MBG不會覆蓋和父類中完全匹配的屬性。匹配規則:
屬性名完全相同
屬性類型相同
屬性有getter方法
屬性有setter方法
trimStrings:是否對數據庫查詢結果進行trim操作,如果設置為true就會生成類似這樣public void setUsername(String username) {this.username = username == null ? null : username.trim();}的setter方法。默認值為false。
配置示例如下:
sqlMapGenerator
該元素可選,在context中最多配置一個。但是有如下兩種必選的特殊情況:
如果targetRuntime目標是iBATIS2,該元素必須配置一個。
如果targetRuntime目標是MyBatis3,只有當需要XML時,該元素必須配置一個。 如果沒有配置 ,則使用以下的規則:
如果指定了一個,那么MBG將只生成XML的SQL映射文件和實體類。
如果沒有指定,那么MBG將只生成實體類。
該元素只有兩個屬性(和前面提過的的屬性含義一樣),都是必選的。
targetPackage:生成實體類存放的包名,一般就是放在該包下。實際還會受到其他配置的影響(
targetProject:指定目標項目路徑,使用的是文件系統的絕對路徑。
該元素支持子元素,只有一個可以配置的屬性:
enableSubPackages:如果true,MBG會根據catalog和schema來生成子包。如果false就會直接用targetPackage屬性。默認為false。
配置示例:
javaClientGenerator
javaClientGenerator元素可選,在context元素中最多配置一個。如果不配置該元素,就不會生成Mapper接口。
javaClientGenerator元素有3個必選屬性:
type:該屬性用于選擇一個預定義的客戶端代碼(可以理解為Mapper接口)生成器,用戶可以自定義實現,需要繼承org.mybatis.generator.codegen.AbstractJavaClientGenerator類,必選有一個默認的構造方法。 該屬性提供了以下預定的代碼生成器,首先根據的targetRuntime分成三類:
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接口
targetPackage:生成實體類存放的包名,一般就是放在該包下。實際還會受到其他配置的影響(
targetProject:指定目標項目路徑,使用的是文件系統的絕對路徑。
javaClientGenerator元素還有一個可選屬性:
implementationPackage:如果指定了該屬性,實現類就會生成在這個包中。
javaClientGenerator元素支持子元素設置的屬性:
enableSubPackages
exampleMethodVisibility
methodNameCalculator
rootInterface
useLegacyBuilder
這幾個屬性不太常用,具體作用請看完整的文檔,這里對rootInterface做個簡單介紹。
rootInterface用于指定一個所有生成的接口都繼承的父接口。 這個值可以通過
配置示例:
targetProject="E:\MyProject\src\main\java"/>
table
table 元素在context元素中最少要配置一個,可以配置多個。由于table元素非常復雜,并且還包括多個復雜的子元素,所以單獨一篇進行介紹,請移步:MyBatis Generator 配置文件詳解 之 table 元素
總結
以上是生活随笔為你收集整理的ibatis mysql 配置文件详解_MyBatis Generator 配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言字符串子串查找_字符串操作的全面总
- 下一篇: mysql group by 无效_My