MBG全部指代MyBatis Generator:
- MyBatis Generator 1.3.4 擴充,可以設定 Mapper(Dao)字尾
- 運作MyBatis Generator
- 有4種運作MBG的方法,具體請看文檔 運作 MyBatis Generator
- MBG下載下傳位址: http://repo1.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/
XML配置詳解
在MBG中,最主要也最重要的就是XML配置檔案,是以本文主要就是XML配置
這裡按照配置的順序對配置逐個講解,更細的内容可以配合中文文檔參照。
1. 配置檔案頭
<?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">
2. 根節點 <generatorConfiguration>
<generatorConfiguration>
generatorConfiguration
節點沒有任何屬性,直接寫節點即可,如下:
<generatorConfiguration>
<!-- 具體配置内容 -->
</generatorConfiguration>
3. <generatorConfiguration>
的子元素
<generatorConfiguration>
從這段開始,就是配置的主要内容,這些配置都是
generatorConfiguration
元素的子元素(有嚴格順序)
-
(0個或1個)<properties>
-
(0個或多個)<classPathEntry>
-
(1個或多個)<context>
3.1 <properties>
元素
<properties>
這個元素用來指定外部的屬性元素,不是必須的元素。
元素用于指定一個需要在配置中解析使用的外部屬性檔案,引入屬性檔案後,可以在配置中使用 ${property}這種形式的引用,通過這種方式引用屬性檔案中的屬性值。 對于後面需要配置的jdbc資訊和targetProject屬性會很有用
這個屬性可以通過resource或者url來指定屬性檔案的位置,這兩個屬性隻能使用其中一個來指定,同時出現會報錯
resource
:指定classpath下的屬性檔案,使用類似
com/myproject/generatorConfig.properties
這樣的屬性值。
url
:可以指定檔案系統上的特定位置,例如
file:///C:/myfolder/generatorConfig.properties
3.2 <classPathEntry>
<classPathEntry>
這個元素可以0或多個,不受限制。
最常見的用法是通過這個屬性指定驅動的路徑,例如:
<classPathEntry location="E:\mysql\mysql-connector-java-5.1.29.jar"/>
注意,classPathEntry隻在下面這兩種情況下才有效
- 當加載 JDBC 驅動内省資料庫時
- 當加載根類中的 JavaModelGenerator 檢查重寫的方法時
**是以,**如果你需要加載其他用途的jar包,classPathEntry起不到作用,不能這麼寫,解決的辦法就是将你用的jar包添加到類路徑中,在IDE中運作的時候,添加jar包比較容易。當從指令行執行的時候,需要用java -cp xx.jar,xx2.jar xxxMainClass這種方式在-cp後面指定來使用(注意-jar會導緻-cp無效)。
3.3 <context>
<context>
在MBG的配置中,至少需要有一個<context>元素。
<context>元素用于指定生成一組對象的環境。例如指定要連接配接的資料庫,要生成對象的類型和要處理的資料庫中的表。運作MBG的時候還可以指定要運作的<context>
該元素隻有一個必選屬性id,用來唯一确定一個<context>元素,該id屬性可以在運作MBG時使用
此外還有幾個可選屬性
defaultModelType
這個屬性很重要,這個屬性定義了MBG如何生成實體類
這個屬性有以下可選值:
-
:這是預設值,這個模型和下面的conditional
類似,除了如果那個單獨的類将隻包含一個字段,将不會生成一個單獨的類。 是以,如果一個表的主鍵隻有一個字段,那麼不會為該字段生成單獨的實體類,會将該字段合并到基本實體類中。hierarchical
-
:該模型為每一張表隻生成一個實體類。這個實體類包含表中的所有字段。這種模型最簡單,推薦使用。flat
-
:如果表有主鍵,那麼該模型會産生一個單獨的主鍵實體類,如果表還有BLOB字段, 則會為表生成一個包含所有BLOB字段的單獨的實體類,然後為所有其他的字段生成一個單獨的實體類。 MBG會在所有生成的實體類之間維護一個繼承關系。hierarchical
-
:此屬性用于指定生成的代碼的運作時環境。該屬性支援以下可選值:targetRuntime
-
:這是預設值MyBatis3
-
MyBatis3Simple
-
Ibatis2Java2
-
Ibatis2Java5 一般情況下使用預設值即可,有關這些值的具體作用以及差別請檢視中文文檔的詳細内容。
-
introspectedColumnImpl:該參數可以指定擴充org.mybatis.generator.api.IntrospectedColumn該類的實作類。該屬性的作用可以檢視擴充MyBatis Generator。
一般情況下,我們使用如下的配置即可:
如果你希望不生成和Example查詢有關的内容,那麼可以按照如下進行配置:
使用MyBatis3Simple可以避免在後面的<table>中逐個進行配置(後面會提到)
MBG配置中的其他幾個元素,基本上都是<context>的子元素,這些子元素(有嚴格的配置順序)包括:
-
<property>
-
<plugin>
-
<commentGenerator>
-
(1個)<jdbcConnection>
-
<javaTypeResolver>
-
<javaModelGenerator>
-
<sqlMapGenerator>
-
<javaClientGenerator>
-
<table>
其中
<property>
屬性比較特殊,後面講解的時候都會和父元素一起進行講解。在講解
<property>
屬性前,我們先看看什麼是分隔符?。
這裡通過一個例子說明。假設在Mysql資料庫中有一個表名為user info,你沒有看錯,中間是一個空格,這種情況下如果寫出select * from user info這樣的語句,肯定是要報錯的,在Mysql中的時候我們一般會寫成如下的樣子:
select * from user info
這裡的使用的**反單引号()**就是**分隔符**,**分隔符**可以用于**表名**或者**列名**。 下面繼續看`支援的屬性:
-
autoDelimitKeywords
-
beginningDelimiter
-
endingDelimiter
-
javaFileEncoding
-
javaFormatter
-
xmlFormatter
由于這些屬性比較重要,這裡一一講解。
首先是autoDelimitKeywords,當表名或者字段名為SQL關鍵字的時候,可以設定該屬性為true,MBG會自動給表名或字段名添加分隔符。
然後這裡繼續上面的例子來講beginningDelimiter和endingDelimiter屬性。
由于beginningDelimiter和endingDelimiter的預設值為雙引号("),在Mysql中不能這麼寫,是以還要将這兩個預設值改為**反單引号()**,配置如下: <property name="beginningDelimiter" value=""/>
屬性javaFileEncoding設定要使用的Java檔案的編碼,預設使用目前平台的編碼,隻有當生産的編碼需要特殊指定時才需要使用,一般用不到。
最後兩個javaFormatter和xmlFormatter屬性可能會很有用,如果你想使用模闆來定制生成的java檔案和xml檔案的樣式,你可以通過指定這兩個屬性的值來實作。
接下來分節對其他的子元素逐個進行介紹。