国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Java數(shù)據(jù)訪問對象(DAO)編程模入門

2019-11-18 15:43:52
字體:
供稿:網(wǎng)友

  J2EE開發(fā)人員使用數(shù)據(jù)訪問對象(DAO)設計模式把底層的數(shù)據(jù)訪問邏輯和高層的商務邏輯分開。實現(xiàn)DAO模式能夠更加專注于編寫數(shù)據(jù)訪問代碼。這篇文章中,java開發(fā)人員Sean C. Sullivan從三個方面討論DAO編程的結(jié)構(gòu)特征:事務劃分,異常處理,日志記錄。

  在最近的18個月,我和一個優(yōu)秀的軟件開發(fā)團隊一起工作,開發(fā)定制基于WEB的供給鏈治理應用程序.我們的應用程序訪問廣泛的持久層數(shù)據(jù),包括出貨狀態(tài),供給鏈制度,庫存,貨物發(fā)運,項目治理數(shù)據(jù),和用戶屬性等.我們使用JDBC API連接我們公司的各種數(shù)據(jù)庫平臺,并且在整個應用程序中應用了DAO設計模式.

  通過在整個應用程序中應用數(shù)據(jù)訪問對象(DAO)設計模式使我們能夠把底層的數(shù)據(jù)訪問邏輯和上層的商務邏輯分開.我們?yōu)槊總€數(shù)據(jù)源創(chuàng)建了提供CRUD(創(chuàng)建,讀取,更新,刪除)操作的DAO類.

  在本文中,我將向你介紹DAO的實現(xiàn)策略以及創(chuàng)建更好的DAO類的技術(shù).我會明確的介紹日志記錄,異常處理,和事務劃分三項技術(shù).你將學在你的DAO類中怎樣把這三種技術(shù)結(jié)合在一起.這篇文章假設你熟悉JDBC API,SQL和關(guān)系性數(shù)據(jù)庫編程.

  我們先往返顧一下DAO設計模式和數(shù)據(jù)訪問對象.

  DAO基礎(chǔ)

  DAO模式是標準的J2EE設計模式之一.開發(fā)人員使用這個模式把底層的數(shù)據(jù)訪問操作和上層的商務邏輯分開.一個典型的DAO實現(xiàn)有下列幾個組件:

  1. 一個DAO工廠類;

  2. 一個DAO接口;

  3. 一個實現(xiàn)DAO接口的具體類;

  4. 數(shù)據(jù)傳遞對象(有些時候叫做值對象).

  具體的DAO類包含了從特定的數(shù)據(jù)源訪問數(shù)據(jù)的邏輯。在下面的這段中你將學到設計和實現(xiàn)數(shù)據(jù)訪問對象的技術(shù)。

  事務劃分:

  關(guān)于DAO要記住的一件重要事情是它們是事務性對象。每個被DAO執(zhí)行的操作(象創(chuàng)建,更新、或刪除數(shù)據(jù))都是和事務相關(guān)聯(lián)的。同樣的,事務劃分(transaction demarcation)的概念是非凡重要的。

  事務劃分是在事務界定定義中的方式。J2EE規(guī)范為事務劃分描述了兩種模式:編程性事務(PRogrammatic)和聲明性事務(declarative)。下表是對這兩種模式的拆分:

聲明性事務劃分 編程性事務劃分程序員使用EJB的布署描述符聲明事務屬性程序員擔負編寫事務邏輯代碼的責任。運行時環(huán)境(EJB容器)使用這些屬性來自動的治理事務。應用程序通過一個API接口來控制事務。
  我將把注重力集中的編程性事務劃分上。

  象前面的介紹一樣,DAOs是一些事務對象。一個典型的DAO要執(zhí)行象創(chuàng)建、更新、和刪除這的事務性操作。在設計一個DAO時,首先要問自己如下問題:

  1、 事務將怎樣開始?

  2、 事務將怎樣結(jié)束?

  3、 那個對象將承擔起動一個事務的責任?

  4、 那個對象將承擔結(jié)束一個事務的責任?

  5、 DAO應該承擔起動和結(jié)束事務的責任?

  6、 應用程序需要交叉訪問多個DAO嗎?

  7、 一個事務包含一個DAO還是多個DAO?

  8、 一個DAO包含其它的DAO中的方法嗎?

  回答這些問題將有助于你為DAO對象選擇最好的事務劃分策略。對ADO中的事務劃分有兩個主要的策略。一種方法是使用DAO承擔事務劃分的責任;另一種是延期性事務,它把事務劃分到調(diào)用DAO對象的方法中。假如你選擇前者,你將要在DAO類中嵌入事務代碼。假如你選擇后者,事務代碼將被寫在DAO類的外部。我們將使用簡單的代碼實例來更好的理解這兩種方法是怎樣工作的。

  實例1展示了一個帶有兩種數(shù)據(jù)操作的DAO:創(chuàng)建(create)和更新(update):

public void createWarehouseProfile(WHProfile profile);
public void updateWarehouseStatus(WHIdentifier id, StatusInfo status);
  實例2展示了一個簡單的事務,事務劃分代碼是在DAO類的外部。注重:在這個例子中的調(diào)用者把多個DOA操作組合到這個事務中。

tx.begin(); // start the transaction
dao.createWarehouseProfile(profile);
dao.updateWarehouseStatus(id1, status1);
dao.updateWarehouseStatus(id2, status2);
tx.commit(); // end the transaction
  這種事務事務劃分策略對在一個單一事務中訪問多個DAO的應用程序來說尤為重要。

  你即可使用JDBC API也可以使用Java 事務API(JTA)來實現(xiàn)事務的劃分。JDBC事務劃分比JTA事務劃分簡單,但是JTA提供了更好的靈活性。在下面的這段中,我們會進一步的看事務劃分機制。

  使用JDBC的事務劃分

  JDBC事務是使用Connection對象來控制的。JDBC的連接接口(java.sql.Connection)提供了兩種事務模式:自動提交和手動提交。Java.sql.Connection為控制事務提供了下列方法:



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 延吉市| 通渭县| 茶陵县| 荆门市| 绿春县| 金山区| 黄冈市| 儋州市| 宁蒗| 靖州| 永德县| 黄浦区| 宣恩县| 九龙坡区| 手游| 德兴市| 手机| 灵台县| 炎陵县| 安化县| 宾川县| 嘉禾县| 岳普湖县| 来凤县| 镇雄县| 长丰县| 安仁县| 新邵县| 腾冲县| 赤水市| 长沙市| 福建省| 荃湾区| 洛川县| 蒲城县| 青岛市| 伊春市| 天峨县| 金平| 吉林市| 惠东县|