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

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

定義/關係對映:

在看了例項的和(執行binuild browse -將會啟動InstantDB資料

庫的瀏覽視窗)後,你可能會問:在程式中我們並沒用看到任何關於資料的程式碼,

OJB Broker是怎麼樣實現把Product類的資訊儲存到PRODUCT表中去的?OJB怎麼樣知道把

資料庫中的NAME列對映到name屬性上?

答案就是一切都是在OJB後設資料庫中進行的。庫中包含了一些類來描述O/R對映(可以參

考org..ojb.broker.metadata包)。庫中含有一些普遍的物件,這些物件能

夠被動態的建立和修改。這給那些需要動態改變對映關係的情況提供了很大的便利。保

持動態對映有下面幾個好處:

1. 不需要Java原始碼的處理,不需要儲存庫的編譯。

2. 對映能夠在執行時被檢查、改變,允許最大限度的改變儲存行為或是在OJB上建立自

己的儲存層。

但是也有一個缺點:問題。OJB的動態方法使用了Java的反射機制和JavaBean的訪問

機制來檢查和修改商業物件,我們必須把動態訪問的次數降到最少。

在下面的章節,我們將講解例項程式怎樣使用O/R對映。

一個儲存類:Product

在我們的例項程式中只有一個儲存類,Product類,下面是它的定義:

package org.apache.ojb.tutorial1;

  /**

  * represents product s in the tutorial system

  */

  public class Product

  {

  /** product name*/

  protected String name;

  /** price per item*/

  protected double price;

  /** stock of currently available items*/

  protected int stock;

  ...

}

我刪除了其中的方法定義,他們與O/R對映過程無關。

資料庫中的Product表:

現在讓我們來看一下表,用 DDL來定義(我給出了InstantDB的語法,在不同的RDBM

S中語法可能會有不同):

CREATE TABLE PRODUCT (

  ID  INT PRIMARY KEY,

  NAME  CHAR(100),

  PRICE DOUBLE,

  STOCK INT

  )

你可能發現了我加了一列ID,並設為主鍵。這是手工加入的,它並不屬於程式中的prod

uct。如果你使用了手工加入,你必須在你的Product類中加入這一屬性。OJB要求所有表

的主鍵列必須在相應的class中有對映。這也是儲存層中少數需要遵守的規則之一,因為

這些屬性並不是OOD模型的必須部分。

所以我們必須修改我們一開始的類:

public class Product

  {

  /**

  * this is the primary key attribute needed by OJB to

  * ntify instances

  */

  private int _id;

  /** product name*/

  protected String name;

  /** price per item*/

  protected double price;

  /** stock of currently available items*/

  protected int stock;

}

除了主鍵要求外,再沒有任何其他的限制。沒有必要擴充套件基類去實現所有的介面,這就

是我們為什麼說OJB是透明儲存的原因。

 

非常重要的一點:儲存類必須有一個公共無引數的構造。


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

相關文章