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

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

J2EE核心:iBatis DAO入門與進階一

2019-11-17 05:53:36
字體:
供稿:網(wǎng)友

在核心J2EE模式中是這樣介紹DAO模式的:為了建立一個健壯的J2EE應用,應該將所有對數(shù)據(jù)源的訪問操作抽象封裝在一個公共API中。用程序設(shè)計的語言來說,就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。在這個應用程序中,當需要和數(shù)據(jù)源進行交互的時候則使用這個接口,并且編寫一個單獨的類來實現(xiàn)這個接口在邏輯上對應這個特定的數(shù)據(jù)存儲。

 

比如考慮在iBatis: SQL Maps中的應用例子。這是一個Struts應用答應對一個關(guān)系表執(zhí)行SELECT, INSERT, UPDATE和DELETE的SQL請求。在這個應用中,使用SQL Maps做持續(xù)性框架。現(xiàn)在我們要修改這個應用,將這個關(guān)系表儲存在一個xml文件中而不是存在關(guān)系數(shù)據(jù)庫中,或者使用Hibernate來實現(xiàn)SELECT請求,而用SQL Map來執(zhí)行其他請求,因為Hibernate提供了對高速緩存更好的支持。這樣的修改很難實現(xiàn),或者即使我們能修改而實現(xiàn)了這個功能,也會是很混亂的解決方案。

 

對于這類問題更好的解決方法是建立一個ContactDAO接口,在這個接口中定義處理SELECT, INSERT, UPDATE, 和DELETE 請求的事務方法。然后根據(jù)不同的事務邏輯建立不同的類實現(xiàn)各個方法。所以可能會有一個類處理使用SQL Maps同關(guān)系表進行交互的情況,而另外一個類處理用XML文件存放關(guān)系表而不是關(guān)系數(shù)據(jù)庫的情況,等等。在項目中,根據(jù)實際的需要從不同的ContactDAO中選擇相應的實現(xiàn)。這種關(guān)系見圖1:J2EE核心:iBatis DAO入門與進階一

圖1. ContactDAO 接口及實現(xiàn)

 

iBatis DAO是由Apache主持的開源框架項目,主要目標是為了解決這類問題。它答應在工程中以DAO模式為基礎(chǔ)建立應用。這就意味著可以建立一個XML文件,并聲明XMLContactDAO.java是ContactDAO的實現(xiàn)類,這個類知道如何從XML文件中讀寫數(shù)據(jù)。SQLMapContactDAO則知道如何用SQL Maps作為持續(xù)化框架與關(guān)系表進行交互。在工程中,假如向DAO框架提交一個需要XML的ContactDAO請求,框架則會返回一個XMLContactDAO對象。同樣的DAO框架提供了唯一的接口處理事務治理,這個接口能實現(xiàn)與數(shù)據(jù)的存儲方式無關(guān)。它同樣考慮了底層連接治理細節(jié)和初始化存儲框架。

這篇文章是關(guān)于如何一步一步的在項目中應用iBatis DAO框架的基礎(chǔ)指導。我們將由如何把SQL Maps一文中的應用實例改為應用DAO框架入手。然后,我們要討論DAO框架的構(gòu)造。再下一步,我們關(guān)注事務治理是如何在DAO框架中得到支持的。最后一部分是關(guān)于如何建立自己的事務治理模塊。

 

示例應用



首先,我們將SQL Maps一文中的例子改為應用DAO框架。

1.        將ibatis-dao-2.jar文件復制到WEB-INF/lib目錄下。

2.        在Java源程序的目錄里新建一個如下的DAOMap.xml文件

清單1

 


 
  
  <PRoperty value="   "com/sample/contact/dao/sqlmap/SqlMapConfig.xml"/>
  
     implementation=
   "com.sample.contact.dao.sqlmap.SQLMapContactDAO"/>
 

 

DAOMap.xml是發(fā)布iBatis DAO框架的配置文件。是根元素,每個元素描述了一種存儲機制。在這個例子中只使用了SQL Maps來存儲,所以我們這里只有一個元素。每種存儲機制必須包含一個元素,這個元素描述連接它后面的數(shù)據(jù)存儲所用的治理器,并且標記事務的界限。我們將在稍后再討論transactionManager。

 

元素還包括一組DAO用于描述其他的存儲治理機制。在這個例子中,我們將生成一個使用SQL Maps存儲的ContactDAO,所以在配置文件中添加一個ie標記來定義SQLMapContactDAO。

 

3.       建立ContactDAO.java,如下:

2

 

public interface ContactDAO extends DAO {

    public int insertContact(Contact contact);
    public int updateContact(Contact contact);
    public Contact selectContact(int contactId);
    public int deleteContact(int contactId);
}

  

 

ContactDAO.java定義了用戶和一個關(guān)系表進行交互所需要用到的所有事務處理方法。請注重到ContactDAO.java中的所有方法都將一個Contact對象作為參數(shù),這是一個用來攜帶數(shù)據(jù)的數(shù)據(jù)傳遞對象。

 

4.        建立一個SQLMapContactDAO.java文件,如下

清單3

public class SQLMapContactDAO extends
 SqlMapDaoTemplate implements ContactDAO {
  public SQLMapContactDAO(DaoManager arg0) {
      super(arg0);
  }
  public int deleteContact(int contactId) {
    return super.delete("deleteContact",
    new Integer(contactId));
  }
  public int insertContact(Contact contact) {

    Integer contactId =(Integer)super.insert
      ("insertContact",contact);
    return contact.getContactId();
  }
  public Contact selectContact(int contactId) {
    return (Contact)super.queryForObject("getContact",
      new Integer(contactId));
  }
  public int updateContact(Contact contact) {
    return super.update("updateContact",contact);
  }
}

 

SQLMapContactDAO是ContactDAO接口的具體實現(xiàn),它用SQL Maps作為存儲治理機制。注重到我們并沒有寫任何代碼來或者初始化SQL Maps,或得到一個連接,或者在類中標注一個事務的界限。相反,我們繼續(xù)SqlMapDaoTemplate.java類,它幫我們處理下層的、反復的操作。我們在SQLMapContactDAO類中需要考慮的唯一的事情就是事務處理邏輯。

 

5.        修改ContactSelectAction.java類中的execute()方法,如下:

清單4

 

Contact contactForm = (Contact) form;

Reader reader=
  Resources.getResourceAsReader("DAOMap.xml");
DaoManager daoManager =
  DaoManagerBuilder.buildDaoManager(reader);
ContactDAO contactDAO =
  (ContactDAO) daoManager.getDao(
ContactDAO.class,"sqlmap");

request.setAttribute("contactDetail",
  contactDAO.selectContact(
    contactForm.getContactId()));

 

最后一步是修改ContactSelectAction類中的execute()方法,使它使用DAO框架。為了初始化DAO框架,我們需要一個為DAOMap.xml 預備一個Reader對象。iBatis框架為我們提供了方法Resources.getResourceAsReader()來讀取資源。一旦有了Reader對象來讀取DAOMap.xml,就能將它們讀取至DAOManagerBuilder.buildDaoManager(),返回一個DaoManager實例,將來用于與DAO框架進行交互。從理論上來說,應該在項目啟動的時候初始化DAO框架,在我們這個程序中,可以將這個模塊放入Struts插件中,但是為了簡化這個例子,我們將初始化模塊放入execute方法中。

 

有了DaoManager實例后,可以調(diào)用相應的接口和存儲實現(xiàn)類(在元素中的id屬性值)的getDao()方法。在我們的例子中,需要一個SQLMapContactDAO的實例,所以以ContactDAO為接口名稱,“sqlmap”為存儲機制。一旦實現(xiàn)了SQLMapContactDAO實例,就可以在調(diào)用其中的事務方法。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 京山县| 高台县| 辽阳县| 磴口县| 承德县| 五台县| 大田县| 肇东市| 临清市| 廉江市| 称多县| 梨树县| 萝北县| 秦安县| 阳新县| 郧西县| 高邮市| 德兴市| 长岛县| 龙岩市| 鄄城县| 刚察县| 牟定县| 桃源县| 吉林省| 浮梁县| 都兰县| 时尚| 长泰县| 卢氏县| 潼关县| 柯坪县| 津市市| 新安县| 灵山县| 高唐县| 阿坝县| 南汇区| 长顺县| 锡林郭勒盟| 莒南县|