自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 后端
本文簡單介紹了J2EE應(yīng)用程序開發(fā)過程中的數(shù)據(jù)庫類的設(shè)計(jì)模式。J2EE數(shù)據(jù)庫類常是一個(gè)公司的產(chǎn)品目錄,或一個(gè)網(wǎng)站的用戶信息,我們要分析這些數(shù)據(jù)的屬性和關(guān)系,然后進(jìn)行數(shù)據(jù)庫的邏輯設(shè)計(jì),把各種信息用不同的表來存儲(chǔ)。

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

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

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

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

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

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

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

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

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

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

程序?qū)崿F(xiàn)

在具體實(shí)現(xiàn)上面的這種模式時(shí),往往根據(jù)具體的應(yīng)用程序來選用不同的技術(shù)來實(shí)現(xiàn)??吹缴厦娴拿枋瞿J胶?,我們很容易就發(fā)現(xiàn),可以用EJB來實(shí)現(xiàn)(EJB分兩種,實(shí)體EJB和會(huì)話EJB)。

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

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

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

1.實(shí)體類

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

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

下面是一個(gè)實(shí)體類,是對(duì)Book表的封裝。

  1. class Book{   
  2.  
  3.    protected int  ID;   
  4.  
  5.    protected String Name;   
  6.  
  7.    protected String ISBN;   
  8.  
  9.    protected String Author;   
  10.  
  11.    protected int  PublisherID;   
  12.  
  13.    protected double Price;   
  14.  
  15.    protected int  Volume;   
  16.  
  17.    public void setID(int iID);   
  18.  
  19.    public int  getID();   
  20.  
  21.    public void setName(String sName);   
  22.  
  23.    public String getName();   
  24.  
  25.    public void setISBN(String sISBN);   
  26.  
  27.    public String getISBN();   
  28.  
  29.    public void setAuthor(String sAuthor);   
  30.  
  31.    public String getAuthor();   
  32.  
  33.    public void setPublisherID(int iID);   
  34.  
  35.    public int  getPublisherID();   
  36.  
  37.    public void setPrice(double dPrice);   
  38.  
  39.    public double getPrice();   
  40.  
  41.    public void setVolume(int iVolume);   
  42.  
  43.    public int  getVolume();   
  44.  
  45.    public Book(int iID, String sName, String sISBN, int iPublisherID,  
  46.  double dPrice, int iVolume);   
  47.  
  48.   }; 

同樣地可以對(duì)表Publisher進(jìn)行封裝。

2.會(huì)話類

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

我們可以看一下對(duì)Book表的封裝。

  1. class BookTable{   
  2.  
  3.    void Add(Book book);   
  4.  
  5.    void Delete(Book book);   
  6.  
  7.    void Update(Book book);   
  8.  
  9.    Collection findbyID(int iID);   
  10.  
  11.     Collection findbyXXXX(XX,XX);   
  12.  
  13.    Collection findbyPulisherName(String sPublisherName);   
  14.  
  15.   }; 

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

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

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

事務(wù)處理

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

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

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

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

下面的代碼是一個(gè)示范:

  1. con.setAutoCommit(false);   
  2.  
  3.    PreparedStatement updateSales=con.prepareStatement(  
  4. "UPDATE COFFES SET SALES=? WHERE COF_NAME LIKE ?");   
  5.  
  6.   updateSales.setInt(1,50);   
  7.  
  8.   updateSales.setString(2,"Colombian");   
  9.       
  10.     updateSales.executeUpdate();   
  11.  
  12.   PreparedStatement updateTotal=con.prepareStatement(  
  13. "UPDATE COFFEES SET TOTAL =TOTAL+ ? WHERE COD_NAME LIKE ?");   
  14.  
  15.   updateTotal.setInt(1,50);   
  16.  
  17.   updateTotal.setString(2,"Colombian");   
  18.  
  19.   updateTotal.executeUpdate();   
  20.  
  21.   con.commit(0;   
  22.  
  23.   con.setAutoCommit(true); 

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

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

【編輯推薦】

  1. 簡析J2EE應(yīng)用程序中數(shù)據(jù)庫類的設(shè)計(jì)模式
  2. J2EE設(shè)計(jì)模式之Template
  3. 如何優(yōu)化JavaScript腳本的性能
  4. J2EE之DAO設(shè)計(jì)模式簡介與實(shí)例
  5. J2EE常用的設(shè)計(jì)模式
責(zé)任編輯:book05 來源: 百度博客
相關(guān)推薦

2009-06-23 08:06:46

J2EE體系架構(gòu)J2EE模型J2EE設(shè)計(jì)模式

2009-06-11 17:07:49

WebsphereJ2EE應(yīng)用程序

2009-06-11 17:11:07

J2EE設(shè)計(jì)模式工廠模式

2009-06-11 17:23:09

J2EE設(shè)計(jì)模式State模式

2009-06-11 17:19:47

J2EE設(shè)計(jì)模式Template

2012-03-14 10:02:58

ibmdw

2012-04-11 11:07:18

ibmdw

2009-06-23 08:15:50

J2EE基于角色的授權(quán)

2009-06-23 08:18:31

SQL語句構(gòu)造JavaBeanJ2EE

2009-06-22 17:05:41

Java EEJava企業(yè)應(yīng)用

2009-06-10 14:10:23

J2EE學(xué)習(xí)J2EE是什么

2009-06-10 13:37:06

J2EE可伸縮性J2EE靈活性J2EE維護(hù)

2009-06-11 17:13:44

J2EE設(shè)計(jì)模式Dao設(shè)計(jì)模式

2009-06-11 17:24:46

J2EE的MVC體系結(jié)J2EE設(shè)計(jì)模式

2009-09-23 17:11:18

數(shù)據(jù)持久層Hibernate

2010-02-22 10:27:44

Python應(yīng)用程序

2009-06-23 16:48:26

J2EE常見問題J2EE平臺(tái)

2009-04-13 11:39:37

IBMdWJ2EEUNIX

2009-06-11 17:06:11

J2EE歷史Java EE概述

2009-06-16 11:14:00

Hibernate+SJ2EE應(yīng)用開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)