成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ibatis DAO入門進(jìn)階寶典

開發(fā) 后端
我們學(xué)習(xí)J2EE的時(shí)候,肯定會看到不少關(guān)于ibatis DAO的內(nèi)容。然而,面對ibatis DAO這樣一個(gè)比較復(fù)雜的技術(shù),我們應(yīng)該從何處入手?怎樣從入門到精通掌握呢?您可以看看這篇文章。

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

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

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


 

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

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

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

示例應(yīng)用

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

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

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

清單1:

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

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

元素還包括一組DAO用于描述其他的存儲管理機(jī)制。在這個(gè)例子中,我們將生成一個(gè)使用SQL Maps存儲的ContactDAO,所以在配置文件中添加一個(gè)ie標(biāo)記來定義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定義了用戶和一個(gè)關(guān)系表進(jìn)行交互所需要用到的所有事務(wù)處理方法。請注意到ContactDAO.java中的所有方法都將一個(gè)Contact對象作為參數(shù),這是一個(gè)用來攜帶數(shù)據(jù)的數(shù)據(jù)傳遞對象。

 

4.        建立一個(gè)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接口的具體實(shí)現(xiàn),它用SQL Maps作為存儲管理機(jī)制。注意到我們并沒有寫任何代碼來或者初始化SQL Maps,或得到一個(gè)連接,或者在類中標(biāo)注一個(gè)事務(wù)的界限。相反,我們繼承SqlMapDaoTemplate.java類,它幫我們處理下層的、反復(fù)的操作。我們在SQLMapContactDAO類中需要考慮的唯一的事情就是事務(wù)處理邏輯。

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()方法,使它使用ibatis DAO框架。為了初始化ibatis DAO框架,我們需要一個(gè)為DAOMap.xml 準(zhǔn)備一個(gè)Reader對象。iBatis框架為我們提供了方法Resources.getResourceAsReader()來讀取資源。一旦有了Reader對象來讀取DAOMap.xml,就能將它們讀取至DAOManagerBuilder.buildDaoManager(),返回一個(gè)DaoManager實(shí)例,將來用于與DAO框架進(jìn)行交互。從理論上來說,應(yīng)該在項(xiàng)目啟動的時(shí)候初始化DAO框架,在我們這個(gè)程序中,可以將這個(gè)模塊放入Struts插件中,但是為了簡化這個(gè)例子,我們將初始化模塊放入execute方法中。

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


 

【編輯推薦】

  1. ibatis官方提示文檔中的錯誤
  2. ibtis配置之添加ibatis Dao支持
  3. 探索的ibatis DAO事務(wù)管理模塊
  4. ibatis resultMap報(bào)錯解決一例
  5. ibtis了解iBatis.Net中的ResultMap
責(zé)任編輯:桑丘 來源: 中國IT實(shí)驗(yàn)室
相關(guān)推薦

2009-07-22 13:32:43

iBATIS DAO

2009-07-16 09:14:26

iBATIS DAO

2009-07-20 18:00:16

iBATIS DAO事

2009-07-16 17:01:32

ibatis dao

2009-07-21 13:08:08

iBATIS DAO

2009-07-21 11:17:46

iBATISDAO的配置

2009-07-17 14:20:31

ibatis Dao

2009-07-20 14:56:18

iBATIS.NET動態(tài)選擇DAO

2009-07-17 14:03:34

ibatis DAO事務(wù)管理

2009-07-17 09:44:40

iBATIS教程

2009-09-23 11:21:32

學(xué)習(xí)Hibernate

2009-07-21 14:24:46

iBATIS教程

2009-07-20 09:27:42

IBATIS.netDAO

2010-06-13 11:29:51

MySQL數(shù)據(jù)庫

2010-05-28 18:22:51

MySQL基本操作

2020-10-13 09:53:51

HarmonyOS入門下載

2009-07-20 17:42:04

iBATIS入門

2010-08-04 09:43:29

遠(yuǎn)程桌面連接

2021-12-12 18:15:06

Python并發(fā)編程

2019-01-03 12:50:52

Spring BootJava編程語言
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 免费视频一区二区 | 欧美一级片在线看 | 国产福利在线视频 | 欧美日韩免费在线 | 成人av免费 | 免费在线观看一区二区三区 | 久久久久国产 | 在线看无码的免费网站 | 欧美1页| www久久国产 | 成人亚洲视频 | 国产精品久久 | 精品自拍视频 | 亚洲精品18| 久久精品一区二区三区四区 | 成人福利电影 | 亚洲精品国产电影 | 天天操精品视频 | 九九久久久 | 日本黄色片免费在线观看 | 福利一区二区在线 | www国产成人免费观看视频,深夜成人网 | 国产精品一二区 | 成人在线观看网站 | 一级毛片视频 | 亚洲国产情侣 | 日韩中文一区二区三区 | 男女久久久 | 成年人国产在线观看 | 视频在线一区 | 欧美性一区二区三区 | 国产精品视频网 | 亚洲在线一区 | xxx国产精品视频 | 99热在线观看精品 | 成人免费精品 | 国产精品一区久久久 | wwwxx在线观看 | 久久久久久免费看 | 国产一级毛片精品完整视频版 | 婷婷色国产偷v国产偷v小说 |