人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

簡析J2EE應(yīng)用程序數(shù)據(jù)庫類設(shè)計模式

簡析J2EE應(yīng)用程序數(shù)據(jù)庫類設(shè)計模式

更新時間:2022-10-07 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

簡析J2EE應(yīng)用程序數(shù)據(jù)庫類設(shè)計模式

CCID2001-9-30 14:28:45
  本文主要介紹一種數(shù)據(jù)庫相關(guān)類的設(shè)計模式。并介紹在J2EE框架中的具體實現(xiàn),以及在事務(wù)處理方面的一些考慮。


一、設(shè)計模式簡介
  在開發(fā)J2EE應(yīng)用程序時,通常是要找出應(yīng)用程序中涉及到的各種信息,比如一個公司的產(chǎn)品目錄,或一個網(wǎng)站的用戶信息,我們會將這些信息放在數(shù)據(jù)庫里。


  在通常的設(shè)計中,我們要分析這些數(shù)據(jù)的屬性和關(guān)系,然后進行數(shù)據(jù)庫的邏輯設(shè)計,把各種信息用不同的表來存儲。比如,要開發(fā)一個圖書信息查詢系統(tǒng)。可以創(chuàng)建下面兩個表來分別表示書和出版社。


  table Book (ID, Name, ISBN, Author, PublisherID, Price, Volume)


  table Publisher (ID, Name, Telephone, Address, Postcode)


  表Book包含了ID,書名,書號,作者,出版社ID,價格,頁數(shù)。表Publisher包含ID,社名,電話,地址,郵編。這兩個表通過出版社ID相關(guān)。


  下面我們來介紹一種數(shù)據(jù)庫相關(guān)類的設(shè)計的模式。


  數(shù)據(jù)庫相關(guān)類可以分成實體類(Entity Class)和會話類(Session Class)。


  實體類對應(yīng)于一個表的記錄的封裝,也就是該類的一個實例對應(yīng)于表中的一個記錄。而且,該類中的屬性和記錄中的字段是一一對應(yīng)的。


  會話類對應(yīng)于對一個表中的所有記錄的操作。比如增加一條記錄,刪除一條記錄,查找記錄和更新一條記錄。


  通過使用這種設(shè)計模式,使程序更加模塊化,便于開發(fā)和維護。當(dāng)然,也可以使用其他設(shè)計模式。


二、程序?qū)崿F(xiàn)
  在具體實現(xiàn)上面的這種模式時,往往根據(jù)具體的應(yīng)用程序來選用不同的技術(shù)來實現(xiàn)。看到上面的描述模式后,我們很容易就發(fā)現(xiàn),可以用EJB來實現(xiàn)(EJB分兩種,實體EJB和會話EJB)。


  我們知道,EJB提出來的目的是用于提供一種分布式組件系統(tǒng)的開發(fā)。如果我們的應(yīng)用程序是一個分布式的應(yīng)用系統(tǒng),那么毫無疑問,使用EJB來實現(xiàn)能大大減輕編程的工作量。同時,通過使用EJB容器的一些高級特性,可以使應(yīng)用程序更加可靠,擴展性也大大加強。這樣一來,開發(fā)人員就不必關(guān)心一些底層技術(shù),比如事務(wù)處理,安全等各個方面,而是把重點放在怎樣實現(xiàn)業(yè)務(wù)邏輯上。但是我們應(yīng)該注意,如果開發(fā)的應(yīng)用不是分布式的情況下,那么采用EJB有可能大大降低系統(tǒng)的性能。因為,EJB調(diào)用的開銷很大。


  本文將探討在不利用EJB技術(shù)的情況下如何來實現(xiàn)上面介紹的這個模式。


  下面以開發(fā)圖書信息查詢系統(tǒng)為例。


  1.實體類


  如前面講到的,實體類的每個實例與表中一個記錄對應(yīng)。這樣,實體類的屬性應(yīng)該和表的每個字段一一對應(yīng)。必須注意的是,實體類的實例是每個記錄在內(nèi)存中的對應(yīng),因此,在程序中對實例的操作并不馬上反應(yīng)到數(shù)據(jù)庫的記錄中。


  在該類中,只是對數(shù)據(jù)的包裝,因此,該類僅需要一些基本的方法,即setXX()和getXX()方法。


  下面是一個實體類,是對Book表的封裝。


  class Book{


   protected int  ID;


   protected String Name;


   protected String ISBN;


   protected String Author;


   protected int  PublisherID;


   protected double Price;


   protected int  Volume;


   public void setID(int iID);


   public int  getID();


   public void setName(String sName);


   public String getName();


   public void setISBN(String sISBN);


   public String getISBN();


   public void setAuthor(String sAuthor);


   public String getAuthor();


   public void setPublisherID(int iID);


   public int  getPublisherID();


   public void setPrice(double dPrice);


   public double getPrice();


   public void setVolume(int iVolume);


   public int  getVolume();


   public Book(int iID, String sName, String sISBN, int iPublisherID, double dPrice, int iVolume);


  };


  同樣地可以對表Publisher進行封裝。


  2.會話類


  會話類主要是對一個表進行處理。這些操作可以是在表中創(chuàng)建一條記錄,刪除一條記錄,更新一條記錄和查找一條記錄。這些操作的結(jié)果是將表中的記錄和內(nèi)存中的實體類的實例對應(yīng)起來,或?qū)嵗c表中的記錄對應(yīng)起來。


  我們可以看一下對Book表的封裝。


  class BookTable{


   void Add(Book book);


   void Delete(Book book);


   void Update(Book book);


   Collection findbyID(int iID);


   Collection findbyXXXX(XX,XX);


   Collection findbyPulisherName(String sPublisherName);


  };


  上面的類的申明中,Add()用于將內(nèi)存中的一個Book實例映射到數(shù)據(jù)庫中。Delete()用于刪除數(shù)據(jù)庫中的某一個記錄。Update()用于更新表中的一個記錄。而findbyXXXX()則對應(yīng)于SELECT語句。


  對于涉及到多個表操作時,可以有兩種方式。一種是象BookTable一樣,專門封裝一個類。另一個方法是,直接在BoolTable中寫一個findbyPublisherName()。這個方法設(shè)計成返回一個Book的集合。


  上面只是簡單的介紹了怎樣實現(xiàn)實體類和會話類。在具體的應(yīng)用中,還要考慮到數(shù)據(jù)庫操作的一致性。下面就介紹一下事務(wù)處理的相關(guān)內(nèi)容。


三、事務(wù)處理
  為了確保對數(shù)據(jù)操作的完整和一致,在程序設(shè)計時要充分考慮到事務(wù)處理方面的問題。


  1.JDBC中怎樣將多個SQL語句組合成一個事務(wù)。


  在JDBC中,打開一個連接對象Connection時,缺省是auto-commit模式,每個SQL語句都被當(dāng)作一個事務(wù),即每次執(zhí)行一個語句,都會自動的得到事務(wù)確認。為了能將多個SQL語句組合成一個事務(wù),要將auto-commit模式屏蔽掉。


  在auto-commit模式屏蔽掉之后,如果不調(diào)用commit()方法,SQL語句不會得到事務(wù)確認。在最近一次commit()方法調(diào)用之后的所有SQL會在方法commit()調(diào)用時得到確認。


  下面的代碼是一個示范:


  con.setAutoCommit(false);


  PreparedStatement updateSales=con.prepareStatement("UPDATE COFFES SET SALES=? WHERE COF_NAME LIKE ?");


  updateSales.setInt(1,50);


  updateSales.setString(2,"Colombian");


  updateSales.executeUpdate();


  PreparedStatement updateTotal=con.prepareStatement("UPDATE COFFEES SET TOTAL =TOTAL+ ? WHERE COD_NAME LIKE ?");


  updateTotal.setInt(1,50);


  updateTotal.setString(2,"Colombian");


  updateTotal.executeUpdate();


  con.commit(0;


  con.setAutoCommit(true);


  2.J2EE中分布式事務(wù)處理


  在J2EE中,程序里可以使用JTA來調(diào)用底層的JTS(JAVA Transaction Service 提供者服務(wù))來處理分布式的事務(wù)處理。另外,如果使用EJB,可以通過在描述文件中指定transaction的屬性來實現(xiàn)。


  有關(guān)分布式事務(wù)處理的具體內(nèi)容,請參見J2EE規(guī)范

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 临沭县| 罗山县| 迭部县| 南皮县| 车致| 玛沁县| 红桥区| 虞城县| 房产| 湖南省| 夏津县| 卫辉市| 翁源县| 武定县| 资兴市| 兖州市| 通州市| 巴林左旗| 淅川县| 白银市| 湘潭市| 宝清县| 吐鲁番市| 白银市| 辽宁省| 巧家县| 天长市| 新丰县| 泉州市| 鄂伦春自治旗| 东兰县| 西乡县| 灌南县| 贡嘎县| 绥江县| 郧西县| 宁强县| 渝北区| 信丰县| 南安市| 临汾市|