MyBatis Generator 配置文件詳解 之 table 元素

相關鏈接:MyBatis Generator 配置文件詳解

開篇說明

此篇主要說明MyBatis Generator 配置文件詳解 中的 table 元素刃麸,有關MyBatis Generator 配置文件詳解的其他內容請移步:MyBatis Generator 配置文件詳解

table 元素

table 元素用來配置要通過內省的表糟袁。只有配置的才會生成實體類和其他文件乓诽。有一個必選屬性(tableName)指定要生成的表名最域,可以使用SQL通配符匹配多個表。例如要生成全部的表啡直,可以按如下配置:

<table tableName="%" />

table 元素包含多個可選屬性:

  1. schema:數(shù)據(jù)庫的schema,可以使用SQL通配符匹配烁涌。如果設置了該值,生成SQL的表名會變成如schema.tableName的形式酒觅。
  2. catalog:數(shù)據(jù)庫的catalog撮执,如果設置了該值,生成SQL的表名會變成如catalog.tableName的形式舷丹。
  3. alias:如果指定抒钱,這個值會用在生成的select查詢SQL的表的別名和列名上。 列名會被別名為 alias_actualColumnName(別名_實際列名) 這種模式颜凯。
  4. domainObjectName:生成對象的基本名稱谋币。如果沒有指定,MBG會自動根據(jù)表名來生成名稱症概。
  5. enableXXX:XXX代表多種SQL方法蕾额,該屬性用來指定是否生成對應的XXX語句。
  6. selectByPrimaryKeyQueryId:DBA跟蹤工具會用到彼城,具體請看詳細文檔诅蝶。
  7. selectByExampleQueryId:DBA跟蹤工具會用到退个,具體請看詳細文檔。
  8. modelType:和<context>的defaultModelType含義一樣调炬,這里可以針對表進行配置语盈,這里的配置會覆蓋<context>的defaultModelType配置。
  9. escapeWildcards:這個屬性表示當查詢列缰泡,是否對schema和表名中的SQL通配符 ('_' and '%') 進行轉義刀荒。 對于某些驅動當schema或表名中包含SQL通配符時(例如,一個表名是MY_TABLE棘钞,有一些驅動需要將下劃線進行轉義)是必須的照棋。默認值是false。
  10. delimitIdentifiers:是否給標識符增加分隔符武翎。默認false。當catalog,schema或tableName中包含空白時溶锭,默認為true宝恶。
  11. delimitAllColumns:是否對所有列添加分隔符。默認false趴捅。

該元素包含多個可用的<property>子元素垫毙,可選屬性為:

  1. constructorBased:和<javaModelGenerator>中的屬性含義一樣。
  2. ignoreQualifiersAtRuntime:生成的SQL中的表名將不會包含schema和catalog前綴拱绑。
  3. immutable:和<javaModelGenerator>中的屬性含義一樣综芥。
  4. modelOnly:此屬性用于配置是否為表只生成實體類。如果設置為true就不會有Mapper接口猎拨。如果配置了<sqlMapGenerator>膀藐,并且modelOnly為true,那么XML映射文件中只有實體對象的映射元素(<resultMap>)红省。如果為true還會覆蓋屬性中的enableXXX方法额各,將不會生成任何CRUD方法。
  5. rootClass:和<javaModelGenerator>中的屬性含義一樣吧恃。
  6. rootInterface:和<javaClientGenerator>中的屬性含義一樣虾啦。
  7. runtimeCatalog:運行時的catalog,當生成表和運行環(huán)境的表的catalog不一樣的時候可以使用該屬性進行配置痕寓。
  8. runtimeSchema:運行時的schema傲醉,當生成表和運行環(huán)境的表的schema不一樣的時候可以使用該屬性進行配置。
  9. runtimeTableName:運行時的tableName呻率,當生成表和運行環(huán)境的表的tableName不一樣的時候可以使用該屬性進行配置硬毕。
  10. selectAllOrderByClause:該屬性值會追加到selectAll方法后的SQL中,會直接跟order by拼接后添加到SQL末尾礼仗。
  11. useActualColumnNames:如果設置為true,那么MBG會使用從數(shù)據(jù)庫元數(shù)據(jù)獲取的列名作為生成的實體對象的屬性昭殉。 如果為false(默認值)苞七,MGB將會嘗試將返回的名稱轉換為駝峰形式。 在這兩種情況下挪丢,可以通過 元素顯示指定蹂风,在這種情況下將會忽略這個(useActualColumnNames)屬性。
  12. useColumnIndexes:如果是true,MBG生成resultMaps的時候會使用列的索引,而不是結果中列名的順序乾蓬。
  13. useCompoundPropertyNames:如果是true,那么MBG生成屬性名的時候會將列名和列備注接起來. 這對于那些通過第四代語言自動生成列(例如:FLD22237),但是備注包含有用信息(例如:"customer id")的數(shù)據(jù)庫來說很有用. 在這種情況下,MBG會生成屬性名FLD2237_CustomerId惠啄。

除了<property>子元素外,<table>還包含以下子元素:

  1. <generatedKey> (0個或1個)
  2. <columnRenamingRule> (0個或1個)
  3. <columnOverride> (0個或多個)
  4. <ignoreColumn> (0個或多個)

后面的小節(jié)對這4個元素進行詳細講解任内。

generatedKey 元素

這個元素是可選的撵渡,最多可以配置一個。

這個元素用來指定自動生成主鍵的屬性(identity字段或者sequences序列)死嗦。如果指定這個元素趋距,MBG在生成insert的SQL映射文件中插入一個<selectKey>元素。 這個元素非常重要越除,這個元素包含下面兩個必選屬性:

  1. column:生成列的列名节腐。
  2. sqlStatement:將返回新值的 SQL 語句。如果這是一個identity列摘盆,您可以使用其中一個預定義的的特殊值翼雀。預定義值如下:
    • Cloudscape
    • DB2
    • DB2_MF
    • Derby
    • HSQLDB
    • Informix
    • MySql
    • SqlServer
    • SYBASE
    • JDBC:這會配置MBG使用MyBatis3支持的JDBC標準的生成key來生成代碼。 這是一個獨立于數(shù)據(jù)庫獲取標識列中的值的方法孩擂。 重要: 只有當目標運行為MyBatis3時才會產(chǎn)生正確的代碼狼渊。 如果與iBATIS2一起使用目標運行時會產(chǎn)生運行時錯誤的代碼。

這個元素還包含兩個可選屬性:

  1. identity:當設置為true時,該列會被標記為identity列类垦, 并且<selectKey>元素會被插入在insert后面狈邑。 當設置為false時,<selectKey>會插入到insert之前(通常是序列)蚤认。重要: 即使您type屬性指定為post官地,您仍然需要為identity列將該參數(shù)設置為true。 這將標志MBG從插入列表中刪除該列烙懦。默認值是false驱入。
  2. type:type=post and identity=true的時候生成的<selectKey>中的order=AFTER,當type=pre的時候,identity只能為false氯析,生成的<selectKey>中的order=BEFORE亏较。可以這么理解掩缓,自動增長的列只有插入到數(shù)據(jù)庫后才能得到ID雪情,所以是AFTER,使用序列時,只有先獲取序列之后你辣,才能插入數(shù)據(jù)庫巡通,所以是BEFORE尘执。

columnRenamingRule 元素

該元素是可選的,最多可以配置一個宴凉,使用該元素可以在生成列之前誊锭,對列進行重命名。這對那些存在同一前綴的字段想在生成屬性名時去除前綴的表非常有用弥锄。 例如假設一個表包含以下的列:

  • CUST_BUSINESS_NAME
  • CUST_STREET_ADDRESS
  • CUST_CITY
  • CUST_STATE

生成的所有屬性名中如果都包含CUST的前綴可能會讓人不爽丧靡。這些前綴可以通過如下方式定義重命名規(guī)則:

<columnRenamingRule searchString="^CUST_" replaceString="" />

注意,在內部籽暇,MBG使用java.util.regex.Matcher.replaceAll方法實現(xiàn)這個功能温治。 請參閱有關該方法的文檔和在Java中使用正則表達式的例子。

當<columnOverride>匹配一列時戒悠,這個元素(<columnRenamingRule>)會被忽略熬荆。<columnOverride>優(yōu)先于重命名的規(guī)則。

該元素有一個必選屬性(searchString):定義將被替換的字符串的正則表達式绸狐。

該元素有一個可選屬性(replaceString):這是一個用來替換搜索字符串列每一個匹配項的字符串卤恳。如果沒有指定,就會使用空字符串六孵。

關于<table>的<property>屬性useActualColumnNames對此的影響可以查看完整文檔。

columnOverride 元素

該元素可選幅骄,可以配置多個劫窒。該元素將某些屬性默認計算的值更改為指定的值。

該元素有一個必選屬性(column):要重寫的列名拆座。

該元素有多個可選屬性:

  1. property:要使用的Java屬性的名稱主巍。如果沒有指定,MBG會根據(jù)列名生成挪凑。 例如孕索,如果一個表的一列名為STRT_DTE,MBG會根據(jù)<table>的useActualColumnNames屬性生成STRT_DTE或strtDte躏碳。
  2. javaType:該列屬性值為完全限定的Java類型搞旭。如果需要,這可以覆蓋由JavaTypeResolver計算出的類型肄渗。 對某些數(shù)據(jù)庫來說,這是必要的用來處理“奇怪的”數(shù)據(jù)庫類型(例如MySql的unsigned bigint類型需要映射為java.lang.Object)咬最。
  3. jdbcType:該列的JDBC類型(INTEGER, DECIMAL, NUMERIC, VARCHAR等等)翎嫡。 如果需要,這可以覆蓋由JavaTypeResolver計算出的類型永乌。 對某些數(shù)據(jù)庫來說惑申,這是必要的用來處理怪異的JDBC驅動 (例如DB2的LONGVARCHAR類型需要為iBATIS 映射為VARCHAR)具伍。
  4. typeHandler:用戶定義的需要用來處理這列的類型處理器。它必須是一個繼承iBATIS的TypeHandler類或TypeHandlerCallback接口(該接口很容易繼承)的全限定的類名圈驼。如果沒有指定或者是空白人芽,iBATIS會用默認的類型處理器來處理類型。重要:MBG不會校驗這個類型處理器是否存在或者可用碗脊。 MGB只是簡單的將這個值插入到生成的SQL映射的配置文件中啼肩。
  5. delimitedColumnName:指定是否應在生成的SQL的列名稱上增加分隔符。 如果列的名稱中包含空格衙伶,MGB會自動添加分隔符祈坠, 所以這個重寫只有當列名需要強制為一個合適的名字或者列名是數(shù)據(jù)庫中的保留字時是必要的。

配置示例:

<table schema="DB2ADMIN" tableName="ALLTYPES" >
  <columnOverride column="LONG_VARCHAR_FIELD" javaType="java.lang.String" jdbcType="VARCHAR" />
</table>

ignoreColumn 元素

該元素可選矢劲,可以配置多個赦拘。該元素可以用來屏蔽不需要生成的列。

該元素有一個必選屬性(column):要忽略的列名芬沉。

該元素還有一個可選屬性(delimitedColumnName):匹配列名的時候是否區(qū)分大小寫躺同。如果為true則區(qū)分。默認值為false丸逸,不區(qū)分大小寫蹋艺。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市黄刚,隨后出現(xiàn)的幾起案子捎谨,更是在濱河造成了極大的恐慌,老刑警劉巖憔维,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涛救,死亡現(xiàn)場離奇詭異,居然都是意外死亡业扒,警方通過查閱死者的電腦和手機检吆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來程储,“玉大人蹭沛,你說我怎么就攤上這事≌吕穑” “怎么了致板?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咏窿。 經(jīng)常有香客問我斟或,道長,這世上最難降的妖魔是什么集嵌? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任萝挤,我火速辦了婚禮御毅,結果婚禮上,老公的妹妹穿的比我還像新娘怜珍。我一直安慰自己端蛆,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布酥泛。 她就那樣靜靜地躺著今豆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柔袁。 梳的紋絲不亂的頭發(fā)上呆躲,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音捶索,去河邊找鬼插掂。 笑死,一個胖子當著我的面吹牛腥例,可吹牛的內容都是我干的辅甥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼燎竖,長吁一口氣:“原來是場噩夢啊……” “哼璃弄!你這毒婦竟也來了?” 一聲冷哼從身側響起构回,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤夏块,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捐凭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拨扶,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡凳鬓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年茁肠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缩举。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡垦梆,死狀恐怖,靈堂內的尸體忽然破棺而出仅孩,到底是詐尸還是另有隱情托猩,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布辽慕,位于F島的核電站京腥,受9級特大地震影響,放射性物質發(fā)生泄漏溅蛉。R本人自食惡果不足惜公浪,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一他宛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧欠气,春花似錦厅各、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宜鸯,卻和暖如春憔古,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背顾翼。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工投放, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人适贸。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓灸芳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拜姿。 傳聞我的和親對象是個殘疾皇子烙样,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容