偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

iBATIS DAO入門基礎教程

開發(fā) 后端
iBATIS DAO入門基礎教程向你介紹iBATIS DAO的一些情況,希望對你在了解iBATIS DAO方面有所幫助。

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

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

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

ContactDAO 接口及實現(xiàn) 

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

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

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

示例應用

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

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

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

清單1:

  1.        "com/sample/contact/dao/sqlmap/SqlMapConfig.xml"/> 
  2.       
  3.          implementation=  
  4.      "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:

  1. public interface ContactDAO extends DAO {  
  2.     
  3.        public int insertContact(Contact contact);  
  4.       public int updateContact(Contact contact);  
  5.       public Contact selectContact(int contactId);  
  6.       public int deleteContact(int contactId);  
  7.   }  

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

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

清單3:

  1. public class SQLMapContactDAO extends 
  2.    SqlMapDaoTemplate implements ContactDAO {  
  3.     public SQLMapContactDAO(DaoManager arg0) {  
  4.         super(arg0);  
  5.     }  
  6.     public int deleteContact(int contactId) {  
  7.       return super.delete("deleteContact",  
  8.       new Integer(contactId));  
  9.     }  
  10.     public int insertContact(Contact contact) {  
  11.     
  12.        Integer contactId =(Integer)super.insert  
  13.         ("insertContact",contact);  
  14.       return contact.getContactId();  
  15.     }  
  16.     public Contact selectContact(int contactId) {  
  17.       return (Contact)super.queryForObject("getContact",  
  18.         new Integer(contactId));  
  19.     }  
  20.     public int updateContact(Contact contact) {  
  21.       return super.update("updateContact",contact);  
  22.     }  
  23.   } 

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

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

清單4:

  1. Contact contactForm = (Contact) form;  
  2.     
  3.    Reader reader=  
  4.     Resources.getResourceAsReader("DAOMap.xml");  
  5.   DaoManager daoManager =  
  6.     DaoManagerBuilder.buildDaoManager(reader);  
  7.   ContactDAO contactDAO =  
  8.     (ContactDAO) daoManager.getDao(  
  9.   ContactDAO.class,"sqlmap");  
  10.     
  11.   request.setAttribute("contactDetail",  
  12.     contactDAO.selectContact(  
  13.       contactForm.getContactId())); 

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

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

iBATIS DAO的相關介紹就到這里,在其他的文章中還會在涉及iBATIS DAO的其他方面。

【編輯推薦】

  1. iBATIS ResultMap基礎淺析
  2. iBATIS CacheModel使用淺析
  3. iBATIS分頁實例中ObjectDataSource的應用淺析
  4. iBATIS模糊查詢的實現(xiàn)實例淺析
  5. iBATIS動態(tài)查詢的實現(xiàn)淺析
責任編輯:仲衡 來源: cnd8
相關推薦

2009-07-16 16:27:33

ibatis DAO

2010-07-23 12:23:49

Perl基礎

2009-07-16 09:14:26

iBATIS DAO

2009-07-16 17:01:32

ibatis dao

2009-07-20 18:00:16

iBATIS DAO事

2009-07-17 09:44:40

iBATIS教程

2009-07-21 14:24:46

iBATIS教程

2009-07-21 13:08:08

iBATIS DAO

2010-06-11 13:53:54

UML建模

2011-07-18 09:35:29

iPhone 框架

2017-07-18 10:14:23

OracleMerge into教程

2017-12-12 07:47:59

dockermarathon服務器

2009-07-17 14:20:31

ibatis Dao

2009-07-21 11:17:46

iBATISDAO的配置

2011-09-13 16:39:50

Android UI設

2016-08-31 14:01:31

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

2009-07-17 14:03:34

ibatis DAO事務管理

2009-07-20 14:56:18

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

2020-03-23 08:09:47

VS CodePythonJupyter Not

2011-04-01 12:39:18

Android
點贊
收藏

51CTO技術棧公眾號