天天看點

Java最強持久層架構MyBatis-Generator-用法詳解(上)XML配置詳解3. <generatorConfiguration>的子元素

MBG全部指代MyBatis Generator:

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>  

      

3.

<generatorConfiguration>

的子元素

從這段開始,就是配置的主要内容,這些配置都是

generatorConfiguration

元素的子元素(有嚴格順序)

  1. <properties>

    (0個或1個)
  2. <classPathEntry>

    (0個或多個)
  3. <context>

    (1個或多個)

3.1

<properties>

元素

這個元素用來指定外部的屬性元素,不是必須的元素。

元素用于指定一個需要在配置中解析使用的外部屬性檔案,引入屬性檔案後,可以在配置中使用 ${property}這種形式的引用,通過這種方式引用屬性檔案中的屬性值。 對于後面需要配置的jdbc資訊和targetProject屬性會很有用

這個屬性可以通過resource或者url來指定屬性檔案的位置,這兩個屬性隻能使用其中一個來指定,同時出現會報錯

resource

:指定classpath下的屬性檔案,使用類似

com/myproject/generatorConfig.properties

這樣的屬性值。

url

:可以指定檔案系統上的特定位置,例如

file:///C:/myfolder/generatorConfig.properties

3.2

<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>

在MBG的配置中,至少需要有一個<context>元素。

<context>元素用于指定生成一組對象的環境。例如指定要連接配接的資料庫,要生成對象的類型和要處理的資料庫中的表。運作MBG的時候還可以指定要運作的<context>

該元素隻有一個必選屬性id,用來唯一确定一個<context>元素,該id屬性可以在運作MBG時使用

此外還有幾個可選屬性

defaultModelType

這個屬性很重要,這個屬性定義了MBG如何生成實體類

這個屬性有以下可選值:

  • conditional

    :這是預設值,這個模型和下面的

    hierarchical

    類似,除了如果那個單獨的類将隻包含一個字段,将不會生成一個單獨的類。 是以,如果一個表的主鍵隻有一個字段,那麼不會為該字段生成單獨的實體類,會将該字段合并到基本實體類中。
  • flat

    :該模型為每一張表隻生成一個實體類。這個實體類包含表中的所有字段。這種模型最簡單,推薦使用。
  • hierarchical

    :如果表有主鍵,那麼該模型會産生一個單獨的主鍵實體類,如果表還有BLOB字段, 則會為表生成一個包含所有BLOB字段的單獨的實體類,然後為所有其他的字段生成一個單獨的實體類。 MBG會在所有生成的實體類之間維護一個繼承關系。
  • targetRuntime

    :此屬性用于指定生成的代碼的運作時環境。該屬性支援以下可選值:
  • MyBatis3

    :這是預設值
  • MyBatis3Simple

  • Ibatis2Java2

  • Ibatis2Java5 一般情況下使用預設值即可,有關這些值的具體作用以及差別請檢視中文文檔的詳細内容。

  • introspectedColumnImpl:該參數可以指定擴充org.mybatis.generator.api.IntrospectedColumn該類的實作類。該屬性的作用可以檢視擴充MyBatis Generator。

一般情況下,我們使用如下的配置即可:

如果你希望不生成和Example查詢有關的内容,那麼可以按照如下進行配置:

使用MyBatis3Simple可以避免在後面的<table>中逐個進行配置(後面會提到)

MBG配置中的其他幾個元素,基本上都是<context>的子元素,這些子元素(有嚴格的配置順序)包括:

其中

<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檔案的樣式,你可以通過指定這兩個屬性的值來實作。

接下來分節對其他的子元素逐個進行介紹。