在應用程式中將OJB作為一個儲存層使用(六) (轉)

gugu99發表於2007-08-17
在應用程式中將OJB作為一個儲存層使用(六) (轉)[@more@]

Product對映:

現在我們要開始講解從Product類到表PRODUCT的對映。通常這種對映都不是透過

實現,而是透過定義一個。DescriptorRepository類提供了一些方法來讀取

xml檔案並進行初始化。結果就能在以後的程式設計中被使用(也可以透過純程式設計來實現)。

 

我們已經寫好了我們的對映關係,檔案放置在src/test/ojb/repository.xml,中,xml

檔案如下所示:

<!-- This is a sample metadata repository for the Bridge System.

  Use this file as a template for building your own maps--&gt

<!-- defining entities for include-files --&gt

]>

  isolation-level="read-uncommitted">

<!-- The Default JC Connection. If a class-descriptor does not

  specify its own Connection,

  the Connection specified here will be used. --&gt

 

  platform="Hdb"

  jdbc-level="2.0"

  ="org.hsqldb.jdbcDriver"

  protocol="jdbc"

  subprotocol="hsqldb"

  lias="/samples/hsql/OJB"

  username="sa"

  pass=""

  />

  <!-- include user defined mappings here --&gt

  &user;

  <!-- include mappings for JUnit tests and sample apps here --&gt

  &junit;

  <!-- include ojb internal mappings here --&gt

  &internal;

檔案含有很多的資訊:

1. Xml檔案透過repository.dtd來驗證其有效性。這就保證的xml檔案語法的正確性。

確保將dtd檔案放在和xml檔案一樣的目錄,否則xml解析器將會報出找不到DTD的錯誤

2. 對映包含一個預設的JDBCConnectDescriptor。該描述包含了在操作中所用到的

JDBC連線。對於那些沒有定義特殊的JDBCConnectionDescriptor的類來說,都使用該描

述中的預設JDBC連線。

在我們的例子中,描述申明瞭所有的操作都是靠JsqlDb JDBC的,相應的資料庫放在

相應的目錄下面。

3. OJB對映回歸測試。透過包含repository_junit.xml中的XML entity&junit。該ent

ity被定義在一個包含的檔案中:

4. OJB內部的對映。OJB需要一些內部表來進行一次阿操作,如維持資料庫鎖,自動增

長,ODMG的collections和Maps。相應的對映也在這裡實現。他們都正確的操作起重要作

用,應該不能被修改。

這些內部對映透過包含repository_internal.xml中的XML entity&internal來定義

5. 定義的對映。使用者定義的對映包含所有對儲存類做的/關係對映資訊。預設

的,例項的對映在這裡定義。這些對映透過包含repository_user.xml的XML entit

y&user來定義。

現在讓我們來看一下Product類,我把相應的對映放在repository_user.xml中,這樣我們很

易找到。從檔案的開頭我們可以看到有一個對Product類的類描述:

<!-- Definitions for org..ojb.broker.Product --&gt

 

  class="org.apache.ojb.broker.Product"

  table="PRODUCT"

  >

 

  name="id"

  column="ID"

  jdbc-type="INTEGER"

  primarykey="true"

  autoincrement="true"

  />

 

  name="name"

  column="NAME"

  jdbc-type="VARCHAR"

  />

 

  name="price"

  column="PRICE"

  jdbc-type="DOUBLE"

  />

 

  name="stock"

  column="STOCK"

  jdbc-type="INTEGER"

  />

 

類描述給出了和表相對映的類名稱。

對於每個儲存類的屬性,我們定義一個field-descriptor,對應儲存在資料庫中的每一

列.對於主鍵,我們有一個特別的標記:primarykey="true".主鍵也相應地被設為autoi

ncrement="true",這就告訴了OJB給這個屬性分配一個唯一的ID。這些都是透過一個Se

quenceManager工具類實現的。

Field-descriptor既可以宣告primitive data型,也可以宣告相應的封裝類。

如果你的儲存類中含有其他儲存類的例項,你可以透過reference-descriptor來定義它

們之間的關係。如果儲存類中有array-或是collection-屬性,你可以使用collection-

descriptor屬性。你可以在org.apache.ojb.broker包中找到一些例子,相應的描述在r

epository.xml中。

工具支援:

一般說來,有三種建立O/R對映的方式:

1. Forward engineering。透過給出類(或是UML模型),生成SQL DDL和對映關係

。我們可以使用一個工具從repository.xml生成一個資料庫。build[.sh] forword

-db可以看到forward engineering的工作過程。

2. Reverse engineering。給出SQL DDL或者資料庫,產生Java類和對映。執行build[

.sh] reverse-db可以看到reverse engineering的工作過程。

3. Mapping proper。給出Java類和SQL DDL,產生對映。我們現在還沒有進行果測試,

但是已經列入下一步的計劃中。

 

結論:

在本文中,我們學習了怎樣給一個簡單的類建立OJB物件/關係對映,在類的例項上透過

OJB PersistenceBroker 進行儲存操作。

接著還有三篇文件,介紹瞭如何使用OJB ODMG API,OJB JDO API和高階O/R對映(包括

1-1,1-n對映,機制,支援多型性和對映繼承)

我們希望該文件會對你有幫助,歡迎提出意見建議。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-963457/,如需轉載,請註明出處,否則將追究法律責任。

相關文章