O/RM的架構程序員
從應用程序的視角看,O/RM有兩個主要部分:持久性API和領域類。在Java中,API一般是Java社區流程的標準之一 ---Java持久性API,企業JavaBeans或Java數據對象——或還沒有成爲標準的流行API,例如TopLink或Hibernate。 數據庫
使用標準的持久性API的一個優勢是它容許項目做出晚部署項目數據庫和持久性提供程序的決定。在項目開始時每每持久性提供程序所須要的功能並不明顯,所以在許多項目中,容許做出晚部署的決定能夠是一個選擇使用它的重要的因素。編程
持久性API容許應用程序的程序員對數據庫執行全部標準的CRUD(建立,檢索,更新,刪除)操做。因爲應用程序的程序員不直接訪問數據庫中的行和列,一些速記符號會描述這些行爲。例如,「持久化一個已被映射的領域類的實例」是「在數據庫中建立一行或多行與映射到的領域類的實例中數據徹底一致的記錄。」一樣,「刪除一個領域類的實例」是指「刪除數據庫中與此領域類的實例徹底對應的一行或多行記錄。」架構
API包含持久化(映射後的領域類的)實例的方法,可以經過主要識別碼來檢索領域類的一個實例,可以根據領域類的值構建一個查詢表達式來查找領域類及子類的全部實例,API還可以從數據庫中刪除領域類的一個實例。而且更新實例操做是在一個事務上下文中完成的,先檢索一個領域類的一個實例,而後使用領域方法來修改此實例的值。工具
領域類以應用程序的視角表示存儲在關係數據庫中的數據,它一般是經過手工或使用工具從數據庫架構生成。映射一般是須要聲明的,表示領域對象模型與關係模式模型之間關聯的映射在應用程序運行以前已經定義。既然領域類沒必要包含特定的持久性的行爲,這些類一般被稱爲POJO(普通舊式Java對象)。測試
缺乏持久性代碼的狀況下,容許持久化類的操做不依賴於持久性方面。所以,能夠無需訪問數據庫或持久性環境來測試許多領域類的行爲。這種編程風格鼓勵關注點分離和封裝。對象
許多表直接映射到領域類,如Employee, Department, Customer, Order, LineItem, Contract,Claim, Product,等等。這些表中的行映射到了領域類的實例。表中的列映射到了領域類的字段。事務