MyBatis Generator 自動生成的POJO對象的使用(一)


  MyBatis Generator 會自動生成以下幾種類型的對象(除非你使用MyBatis3DynamicSql 的運行環境):

  1. Java Model Objects(總是生成)
  2. SQL Map Files(always for iBATIS, usually for MyBatis)
  3. Java Client Object(可選項)
  4. 還會生成一個會在xxxByExample方法中使用到的類。可以參考一下的頁面關於該類的信息:

  而在MyBatis3DynamicSql運行環境下生成的對象依賴於MyBatis Dynamic Sql 庫。這些對象比其他runtimes生成的對象更強大,但它們依賴於MyBatis Dynamic SQL庫。

  1. Java Model Objects
  2. 一個依賴MyBatis Dynamic SQL library的mapper接口和一個“support”類。可以參考MyBatis Dynamic SQL Usage Notes頁面

 

  這里我們只討論前面的幾種生成對象。

一、Java Model Classes

  MyBatis Generator(MBG)生成與數據庫表中的字段對應的Java類。生成的類是一種領域對象(Domain Object),但絕不應與富領域模型(rich Domain Object)混淆。MBG根據數據庫中表和配置選項的特征生成不同類型的“域”對象。

  MBG生成的每個屬性和方法都非標准JavaDoc標記——@mbg.generated。當從Eclipse插件運行時,在MBG的后續運行中,將刪除並替換包含此JavaDoc標記的每個Java元素。而這些類中的其它Java元素則不會被MBG觸碰到。記住這點,你就可以隨心所欲添加自己需要的屬性和方法,而不用擔心在 MBG后續的運行中丟失他們——當然,別對這些元素加@mbg.generated標記就行了。

  在Eclipse插件之外,需要手動合並Java文件,但利用@mbg.generated標記,就可以清楚地知道哪些元素可以安全地刪除。

  接下來的部分描述不MBG所產生的同類型的Domain類。MBG依賴<context>配置元素的defaultModelType屬性值和<table>配置元素的modelType屬性值來生成不同類型的Domain Object。

  

  1.1 Primary Key Class

  此類將包含表的主鍵中每個字段的屬性。屬性名稱將自動生成,並將基於表中的列名稱。可以使用<columnOverride>配置元素覆蓋生成的屬性名稱。

  默認情況下,類的名稱為“TableNameKey”,如果在<table>配置元素上指定了domainObjectName屬性,則為“domainObjectNameKey”。

  如果表具有一個主鍵,則將在分層模型(the hierarchical model)中生成此類。 如果表的主鍵中有多個列,則將在條件模型(the conditional model)中生成此類。 此類不會在平面模型(the flat model)中生成。

 

  1.2 Record Class

  此類將包含表中每個非BLOB和非主鍵列的屬性。

  如果存在有上述主鍵類,該類將繼承主鍵類。屬性名稱將自動生成,並將基於表中的列名稱。可以使用<columnOverride>配置元素覆蓋生成的屬性名稱。

  默認情況下,類的名稱為“TableName”,如果在<table>配置元素上指定了domainObjectName屬性,則為“domainObjectName”。

  如果表具有非BLOB和非主鍵列,則將在分層模型中生成此類。

  如果表具有非BLOB和非主鍵列,或者只有一個主鍵列或一個BLOB列,則將在條件模型中生成此類。

  此類始終在平面模型中生成。

 

  1.3 Record Class With BLOBSs Class

  此類將包含表中每個BLOB列的屬性。

  該類將繼承Record Class(如果有),或者它將擴展主鍵類(請注意,MBG不支持生成僅包含BLOB列的表)。

  屬性名稱將自動生成,並將基於表中的列名稱。 可以使用<columnOverride>配置元素覆蓋生成的屬性名稱。

  此類將是selectByPrimaryKey方法或selectByExampleWithBLOBs方法的返回值。

  該類的名稱將默認為“TableNameWithBLOBs”,如果在<table>配置元素上指定了domainObjectName屬性,則為“domainObjectNameWithBLOBs“。

  如果表具有任何BLOB列,則將在分層模型中生成此類。 如果表具有多個BLOB列,則將在條件模型中生成此類。 此類不會在平面模型中生成。

 

  1.4 Example Class

  該類用於與MBG的動態選擇功能一起使用。

  該類包含一組標准(criteria ),用於在運行時為以下方法生成動態WHERE子句:

  • selectByExample
  • selectByExampleWithBLOBs
  • deleteByExample
  • countByExample
  • updateByExample

  此類不擴展(繼承)任何其他模型類。

  類的名稱默認將是«TableNameExample»,或«domainObjectNameExample»,如果在<table>配置元素上指定了domainObjectName屬性的話。

  如果任何“*ByExample”方法可以能夠使用的話,該類就會被生成。

  請注意,如果表中有許多字段,則此類可能會變得非常大,但DAO方法很小,生成的XML片段也很小。

  如果您不打算使用動態WHERE子句功能,則可能希望禁用這些方法的生成。

  有關使用示例類的詳細信息,請參考: Example Class Usage

 

二、SQL Map Files

  MyBatis Generator(MBG)生成符合MyBatis或iBATIS SQL Map DTD的SQL Map文件。這些文件包含許多不同的元素,這些元素基於表的特征以及您指定的配置選項。

  MBG為您指定的每個表生成不同的SQL Map文件。 SQL Map的name space是表的名稱(由schema和目錄限定,如果存在),實際的namespace是Mapper類。

  MBG不會將SQL Map條目添加到MyBatis / iBATIS配置文件中 - 您必須手動執行此操作(或者如果您願意,可以使用插件使MBG生成框架配置文件)。

  每個生成的XML元素都包含一個XML注釋部分,其中包含字符串@ mbg.generated。在后續運行中,將刪除並替換包含帶有字符串@mbg.generated的注釋的每個元素。XML文件中的任何其他元素都將保持不變。考慮到這一點,您可以將其他元素添加到文件中,而不必擔心在后續運行中丟失它們 - 只需在任何元素注釋中不包含字符串@ mbg.generated。

  以下部分描述了將生成的元素。 注意:在以下描述中,術語“BLOB”用於指代數據類型為BLOB,CLOB,LONGVARCHAR或LONGVARBINARY的任何列。

   (其中定義了14個通用的CRUD方法)

  2.1、Result Map

  此元素用於將數據表的列映射到生成的Java模型對象中的屬性。

  Result Map(和相應的select語句)將不包含:

  • <ignoreColumn>配置元素忽略的任何字段;
  • 表中的任何BLOB字段(參見帶有BLOBs元素的結果映射)

  如果特定列存在,則將根據配置元素<columnOverride>映射表中的列。如果override不存在,則將使用默認屬性名稱和JDBC類型。

  如果在SQL映射中編寫任何自定義連接(join)查詢,則可以擴展此結果映射。這是一個常見的用例,並且是預期的。您計划將此結果映射與其他連接查詢一起使用,您可能希望讓MBG為結果映射中的字段生成前綴。有關生成前綴的信息,請參閱<table>參考頁面。

  如果啟用了select by example, or select by primary key 語句,則將生成此元素。

 

  2,2、Result Map With BLOBs

  該元素擴展了基本的Result Map,並添加了表中存在的任何BLOB字段。

  我們這樣做是因為我們提供了不同版本的select by example語句,具體取決於您是否要在這些查詢中返回BLOB字段。

  Result Map(和相應的select語句)將不包含:<ignoreColumn>配置元素忽略的任何字段。

  如果特定列存在,則將根據其配置元素<columnOverride>映射列。如果override不存在,則將使用默認屬性名稱和JDBC類型。

  

  如果在SQL映射中編寫任何自定義連接(join)查詢,則可以擴展此結果映射。這是一個常見的用例,並且是預期的。您計划將此結果映射與其他連接查詢一起使用,您可能希望讓MBG為結果映射中的字段生成前綴。有關生成前綴的信息,請參閱<table>參考頁面。

  如果該表包含BLOB字段並且啟用了select by example, or select by primary key 語句,則將生成此元素

 

  2.3、SQL Where Clause

  此元素包含“by example”方法使用的可重用where子句。

  如果表中存在任何BLOB字段,則where子句將不包括任何BLOB字段。大多數數據庫不支持WHERE子句中的BLOB字段。

 

  2.4、Select By Primary Key

  此元素包含一個select語句,該語句將返回一行 - 由主鍵指定。 返回的行將包含BLOB字段(如果它們存在於表中)。

  如果表具有主鍵並且啟用了select by primary key語句,則將生成此元素。

 

  2.5、Select By Example

  此元素包含一個select語句,其中的行與示例對象匹配。 這實現了一個簡單的“按示例查詢”功能,可用於生成許多不同的數據庫查詢。

  返回的行將不包含表中存在的任何BLOB字段(請參閱下面的BLOBs語句選擇示例)。

  要點:如果示例類為null,或者未設置任何條件(criteria ),則將選擇表中的所有行。

  如果啟用了select by example語句,則將生成此元素。

 

  2.6、Select By Example With BLOBs

  此元素包含一個select語句,其中的行與示例對象匹配。 這實現了一個簡單的“按示例查詢”功能,可用於生成許多不同的數據庫查詢。 返回的行將包括表中存在的任何BLOB字段。

  要點:如果示例類為null,或者未設置任何條件,則將選擇表中的所有行。

  如果表包含BLOB字段,則將生成此元素,並啟用select by example語句。

  

  2.7、Insert

  此元素是一個insert語句,包含表中的所有字段(包括BLOB),除非使用<ignoreColumn>配置元素專門忽略該字段。

  如果表具有自動生成的key(標識列或序列中的值),並且指定了<generatedKey>配置元素,則MBG將生成相應的<selectKey>元素。

  重要說明:插入方法在iBATIS2和MyBatis3中的工作方式不同。下表總結了差異:

Runtime Behavior
iBatis2 如果指定了<generatedKey>元素,則該方法將返回新生成的鍵。如果未指定<generatedKey>元素,則該方法將為void。
MyBatis3 該方法將返回插入的行數(通常為0或1)。如果指定了<generatedKey>元素,則新生成的鍵的值將在參數對象的相應屬性中設置。

  如果啟用了insert語句,則將生成此元素。  

 

  2.8、Insert Selective

  此元素是一個insert語句,包含表中的所有字段(包括BLOB),除非使用<ignoreColumn>配置元素專門忽略該字段。 但是,此語句不包括參數對象中為null的字段。 這允許您使用列的數據庫默認值(如果存在)。

  此元素不允許將null插入任何字段 - 因為您必須使用常規insert語句。

  重要說明:任何映射到Java原始類型的字段都會是同該方法進行插入。

  如果表具有自動生成的key(標識列或序列中的值),並且指定了<generatedKey>配置元素,則MBG將生成相應的<selectKey>元素。

  重要說明:插入方法在iBATIS2和MyBatis3中的工作方式不同。差異和上表相同:

 

  2.9 、Update By Primary Key

  此元素是一個更新語句,它將更新一行 - 由主鍵指定。

  update語句將更新表中的所有字段,除非:

  • <ignoreColumn>配置元素已忽略該字段
  • 該字段是一個BLOB字段(請參閱主鍵更新BLOBs元素)

  如果表具有主鍵,並且啟用主鍵更新語句,則將生成此元素。

 

  2.10、Update By Primary Key With BLOBs

  此元素是一個更新語句,它將更新一行 - 由主鍵指定。 update語句將更新表中的所有字段(包括BLOB字段),除非:<ignoreColumn>配置元素已忽略該字段

  如果表具有主鍵,該表具有BLOB列,並且啟用了主鍵更新語句,則將生成此元素。

 

  2.11、Update By Primary Key Selective

  此元素是一個更新語句,它將更新一行 - 由主鍵指定。

  update語句將僅更新表中的參數對象的屬性為非null的字段。

  語句可用於更新record中的某些列,而不會影響record中的所有列。 重要說明:如果列已映射到基本類型,則該列將始終更新。 

  如果表具有主鍵,則將生成此元素,並且啟用主鍵更新語句。

 

  2.12、Delete By Primary Key

  該元素是一個刪除語句,它將刪除表中的一行 - 由主鍵指定。

  如果表具有主鍵,則將生成此元素,並且啟用“按主鍵刪除”語句。

 

  2.13、Delete By Example

  此元素是一個刪除語句,它將刪除表中的一行或多行 - 由示例對象指定。

  要點:如果示例類為null,或者未設置任何條件,則表中的所有行都將被刪除。

  如果啟用了“按示例刪除”語句,則將生成此元素。

 

  2.14、Count By Example

  此元素是一個select count(*)語句,它將返回表中與指定示例對象匹配的行數。

  要點:如果示例類為null,或者未設置任何條件,則select將返回整個表中的行數。  

  如果啟用了count by example語句,則將生成此元素。

 

  2.15、Update By Example

  此元素是一個更新語句,它將更新表中與指定示例匹配的所有行。

  update語句將更新表中的所有字段,除非:

  • <ignoreColumn>配置元素已忽略該字段
  • 該字段是一個BLOB字段(請參閱BLOBs元素的示例更新)

  要點:如果示例類為null,或者未設置任何條件,則表中的所有行都將更新。

  如果啟用了通過example語句更新,則將生成此元素。

 

  2.16、Update By Example With BLOBs

  此元素是一個更新語句,它將更新表中與指定示例匹配的所有行。

  update語句將更新表中的所有字段(包括BLOB字段),除非:<ignoreColumn>配置元素已忽略該字段

  要點:如果示例類為null,或者未設置任何條件,則表中的所有行都將更新。

  如果表包含BLOB列,並且啟用了“按示例更新”語句,則將生成此元素。

 

  2.17、Update By Example Selective

  此元素是一個更新語句,它將更新表中與指定示例匹配的所有行。

  update語句將僅更新表中的參數對象的屬性為非null的字段。

  此語句可用於更新某些記錄中的某些列,而不會影響記錄中的所有列。重要說明:如果列已映射到基本類型,則該列將始終更新。

  要點:如果示例類為null,或者未設置任何條件,則表中的所有行都將更新。

  如果啟用了通過example語句更新,則將生成此元素。

 

  三、Java Client Objects

  MyBatis Generator(MBG)生成多種類型的Java客戶端對象。

  Java客戶端對象用於更容易地與生成的XML元素進行交互。 對於配置中的每個表,MBG會生成一個或多個Java客戶端對象。

  對於MyBatis 3,這些是映射器接口(Mapper接口)。 對於iBATIS 2.x,這些是DAO接口和實現類。

  生成Java客戶端對象是可選的,由<javaClientGenerator>配置元素控制。 MBGr可以生成以下類型的客戶端:

  For MyBatis 3.x:

  • XMLMAPPER - for use with the MyBatis 3.x mapper support

  For iBATIS 2.x:

  • IBATIS - for use with the iBATIS DAO Framework
  • SPRING - for use with the Spring Framework
  • GENERIC-CI - with no dependencies beyond the iBATIS Data Mapper
  • GENERIC-SI - also with no dependencies beyond the iBATIS Data Mapper

  生成的每個字段和方法都包含非標准JavaDoc標記@ mbg.generated。 從Eclipse插件運行時,在后續運行中,將刪除並替換包含此JavaDoc標記的每個字段和方法。 該類中的任何其他字段或方法都不會受到影響。

  考慮到這一點,您可以向類中添加其他字段和方法,而不必擔心在后續運行中丟失它們 - 只需在您添加到類中的任何內容上不要包含@ mbg.generated JavaDoc標記。

  在Eclipse插件之外,需要手動合並Java文件,但是您可以使用@mbg.generated JavaDoc標記來了解從文件的先前版本中刪除的安全性。

  Note: in the following descriptions, the term "BLOB" is used to refer to any column with a data type of BLOB, CLOB, LONGVARCHAR, or LONGVARBINARY.

 

  3.1、Methods Common to All DAO Types

  根據表的具體情況和配置選項,Java客戶端生成器將生成以下方法:

  • countByExample
  • deleteByPrimaryKey
  • deleteByExample
  • insert
  • insertSelective
  • selectByPrimaryKey
  • selectByExample
  • selectByExampleWithBLOBs
  • updateByPrimaryKey (with an override to specify whether or not to update BLOB columns)
  • updateByPrimaryKeySelective (will only update non-null fields in the parameter class)
  • updateByExample (with an override to specify whether or not to update BLOB columns)
  • updateByExampleSelective (will only update non-null fields in the parameter class)

  MBG嘗試通過生成不同的對象和方法來更輕松地處理包含BLOB的表,以便您可以使用BLOB字段,或根據情況忽略它們。

  有關使用selectByExample方法的示例,請參閱Example Class Usage頁面。

 

  3.2、XMLMAPPER Clients (MyBatis 3.x) 

  XMLMAPPER客戶端是將映射到生成的XML映射器文件中的方法的接口。

    例如,假設MBG生成了一個名為MyTableMapper的接口。 您可以按如下方式使用接口:

  SqlSession sqlSession = sqlSessionFactory.openSession();

  try { MyTableMapper mapper = sqlSession.getMapper(MyTableMapper.class); List<MyTable> allRecords = mapper.selectByExample(null); } finally { sqlSession.close(); }

  有關如何創建sqlSessionFactory實例的詳細信息,請參閱標准MyBatis文檔。

 

  其余的幾個小節都和ibatis有關,忽略。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM