<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-71  評(píng)論-4  文章-0  trackbacks-0
      一、設(shè)計(jì)模式簡(jiǎn)介 
       在開(kāi)發(fā)J2EE應(yīng)用程序時(shí),通常是要找出應(yīng)用程序中涉及到的各種信息,比如一個(gè)公司的產(chǎn)品目錄,或一個(gè)網(wǎng)站的用戶(hù)信息,我們會(huì)將這些信息放在數(shù)據(jù)庫(kù)里。 

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

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

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

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

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

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

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

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

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

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

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

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

       下面以開(kāi)發(fā)圖書(shū)信息查詢(xún)系統(tǒng)為例。 

       1.實(shí)體類(lèi) 

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

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

       下面是一個(gè)實(shí)體類(lèi),是對(duì)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); 

       }; 

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

       2.會(huì)話(huà)類(lèi) 

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

       我們可以看一下對(duì)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); 

       }; 

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

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

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

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

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

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

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

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

       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來(lái)調(diào)用底層的JTS(JAVA Transaction Service 提供者服務(wù))來(lái)處理分布式的事務(wù)處理。另外,如果使用EJB,可以通過(guò)在描述文件中指定transaction的屬性來(lái)實(shí)現(xiàn)。 

       有關(guān)分布式事務(wù)處理的具體內(nèi)容,請(qǐng)參見(jiàn)J2EE規(guī)范。 
    posted on 2006-01-12 12:38 zjw_albert 閱讀(115) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 花蝴蝶免费视频在线观看高清版 | 日韩免费高清一级毛片在线| 亚洲乱码中文字幕在线| 亚洲国产a级视频| 久久精品人成免费| 爱情岛亚洲论坛在线观看| 亚洲午夜国产精品无码老牛影视| 2019中文字幕在线电影免费| 亚洲国产成人久久一区二区三区| 亚洲综合日韩久久成人AV| 男女超爽刺激视频免费播放| 久久久亚洲欧洲日产国码aⅴ| 久久精品网站免费观看| 高清永久免费观看| 国产亚洲sss在线播放| 久久亚洲欧洲国产综合| 在线天堂免费观看.WWW| 97在线视频免费公开视频| 亚洲 欧洲 视频 伦小说| 亚洲AV无码久久寂寞少妇| 韩国二级毛片免费播放| 亚洲精品免费观看| 免费无遮挡无码视频在线观看| 91亚洲精品麻豆| 亚洲精品亚洲人成人网| 国产自产拍精品视频免费看| 中国人xxxxx69免费视频| jizz免费在线观看| 亚洲日韩久久综合中文字幕| 日本久久久久亚洲中字幕| 免费人成网站在线高清| 成人爽A毛片免费看| 91热久久免费精品99| 三年片免费观看大全国语| 野花视频在线官网免费1| www.亚洲日本| 亚洲综合激情九月婷婷| 日本亚洲视频在线| 精品国产香蕉伊思人在线在线亚洲一区二区| 国产在线观看免费观看不卡| 最近中文字幕免费2019|