1. 程式人生 > >Mybatis逆向工程XML配置檔案

Mybatis逆向工程XML配置檔案

mybatis 逆向工程(MBG)最常用的方式就是通過XML配置的方式來生成檔案,這個配置檔案告訴MBG:

  •   如何去連結資料庫
  • 生成什麼物件以及如何生成物件
  • 應該使用那些表去生成相應的物件

下面是MBG配置檔案的一個例子,通過對這個配置檔案的研究學習來了解頁面中的每個元素以及這些元素的屬性該如何設值。

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

<generatorConfiguration>
  <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />

  <context id="DB2Tables" targetRuntime="MyBatis3">
    <jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
        connectionURL="jdbc:db2:TEST"
        userId="db2admin"
        password="db2admin">
    </jdbcConnection>

    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

    <javaModelGenerator targetPackage="test.model" targetProject="\MBGTestProject\src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <sqlMapGenerator targetPackage="test.xml"  targetProject="\MBGTestProject\src">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao"  targetProject="\MBGTestProject\src">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
      <property name="useActualColumnNames" value="true"/>
      <generatedKey column="ID" sqlStatement="DB2" identity="true" />
      <columnOverride column="DATE_FIELD" property="startDate" />
      <ignoreColumn column="FRED" />
      <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
    </table>

  </context>
</generatorConfiguration>

下面是一些需要特別注意的地方

  • 這個檔案指定使用傳統的DB2 CLI驅動去連線資料庫,也指定了在哪裡可以找到這些驅動。
  • 不要強制使用Java Type Resolver來處理BigDecimal型別的欄位。這就意味著如果可以使用內建型別(比如,Short,Integer,Long)來取代BigDecimal型別。這樣做的目的是為了讓資料庫的Decimal型別和Number型別更易於處理。
  • 在使用java模型生成器的時候應指定子包,意思就是說所生成的java物件類應被放置在一個叫做test.model.db2admin中(因為表是在DB2ADMIN模式中),如果將enableSubPackages 屬性設定為false,這個包名應該是test.model.java模型生成器會對所有字串進行前後取出空格操作,這就意味著對於任何字串屬性的設定都會呼叫trim方法,當你的資料庫返回空格字串的時候他就會有意義。
  • SQL Map生成器應該指定子包。這意味著在本場景中生成的XML檔案會被放置在一個叫做test.xml.db2admin的包中,因為這個表是在DB2ADMIN模式中。如果enableSubPackages屬性被設定為false。這個包名應是test.xml
  • DAO生成器應該使用子包。這意味著在本案例中所生成的DAO類應該被放置在test.dao.db2admin包中,如果enableSubPackage屬性被設定為false,這個包名就是test.dao。這個DAO生成器應該生成引用XML配置的mapper介面
  • 這個檔案僅指定了一個表來生成。但是我們可以指定多個表。下面是關於指定表需要注意的地方
  1. 所生成的物件是基於Customer的名字(例如:CustomerKey,Customer,CustomerMapper)不是table的表名。
  2. 實際的列名稱將作為物件屬性的名稱。如果這個屬性被設定為false(或者沒有指定值),MBG將跳過這個列,也就是不在生成這個列所對應的屬性。還有一種情況是這個屬性名可能會被<cloumnOverride>元素覆蓋。
  3. 如果資料庫的列是一個自動生成的鍵,並且是唯一主鍵,如果資料庫型別是DB2。這將導致MBG在生成<insert>語句中會生成特殊的<selectKey>元素。這樣做是為了讓新生成的主鍵在插入的同時返回主鍵(需要使用DB2特有的SQL)
  4. 如果useActualColumnNames 屬性被設定為false,DATE_FIELD將被對映到一個startDate的屬性,這將會覆蓋本場景中預設的DATE_FIELD或dateField名稱
  5. FRED標識的列會被忽略掉,不會有SQL來列出這個欄位,同時也不會生成相應的java屬性。
  6. LONG_VARCHAR_FIELD標識的欄位將會被作為VARCHAR型別來處理,忽視其實際的資料型別