av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

iBATIS.NET中動(dòng)態(tài)選擇DAO淺析

在iBATIS.NET中可以通過配置文件動(dòng)態(tài)選擇數(shù)據(jù)庫(kù)、動(dòng)態(tài)選擇Dao對(duì)象。

Dao對(duì)象也就是操作數(shù)據(jù)庫(kù)的類,通過配置文件我們可以選擇DataMapper的方式、ADO的方式、NHibernet的方式以前其他第三方的方式來操作數(shù)據(jù)庫(kù)。有利于系統(tǒng)的靈活性和可擴(kuò)展性。

通過分析動(dòng)態(tài)選擇Dao的設(shè)計(jì)可以加深對(duì)iBATIS.NET的理解,更好的使用它,同時(shí)也可以借鑒它的好的設(shè)計(jì)模式,應(yīng)用到我們的程序開發(fā)中去。

源代碼是最好的分析方式,下面是一些重點(diǎn)代碼和說明:

iBATIS.NET中動(dòng)態(tài)選擇DAO前提:需要在dao.config中配置:

 
 
 
 
  1.         

iBATIS.NET中動(dòng)態(tài)選擇DAO在代碼中首先需要進(jìn)行初始化:

 
 
 
 
  1. DomDaoManagerBuilder builder = new DomDaoManagerBuilder();
  2.  builder.Configure("dao.config");

這段代碼實(shí)際上做了很多事情,其中就有:將所有的配置的dao的接口和實(shí)現(xiàn)注冊(cè)到DaoManager類的靜態(tài)屬性中去。也就是在整個(gè)應(yīng)用程序或網(wǎng)站啟動(dòng)時(shí)注冊(cè)一次就可以了,以后直接從靜態(tài)屬性中取出來使用就可以了。

和dao注冊(cè)相關(guān)的代碼如下:

 
 
 
 
  1. dao.Implementation = NodeUtils.GetStringAttribute(prop, "implementation");
  2. dao.Interface = NodeUtils.GetStringAttribute(prop, "interface");
  3. _daoInstance = _daoImplementation.GetConstructor(Type.EmptyTypes).Invoke(null) as IDao;
  4. _proxy = DaoProxy.NewInstance(this);

也就是把配置文件中的interface和implementation讀取,然后生成代理。

iBATIS.NET中動(dòng)態(tài)選擇DAO最主要的就是最后一句代碼,DaoProxy.NewInstance的實(shí)現(xiàn)如下:

 
 
 
 
  1. Castle.DynamicProxy.ProxyGenerator proxyGenerator = new ProxyGenerator();
  2. IInterceptor handler = new DaoProxy(dao);
  3. Type[] interfaces = {dao.DaoInterface, typeof(IDao)};
  4. return (proxyGenerator.CreateProxy(interfaces, handler, dao.DaoInstance) as IDao);

這里我們看到其中使用了Castle.DynamicProxy中的方法(Castle是另外一個(gè)開源框架,我和在以后的博客中再說)

DaoProxy實(shí)現(xiàn)IInterceptor接口,也就是AOP中常有的攔截機(jī)。以后當(dāng)我們通過IDao接口調(diào)用實(shí)際的Dao時(shí),都會(huì)先通過DaoProxy,由DaoProxy攔截后進(jìn)行一些必要的處理,然后再動(dòng)態(tài)決定調(diào)用哪一個(gè)DAO來進(jìn)行數(shù)據(jù)庫(kù)操作。

生成好之后都會(huì)放在DaoManager的靜態(tài)屬性中,下次要用的時(shí)候直接從里面去就可以了:

 
 
 
 
  1. public IDao this[Type daoInterface]
  2. {
  3.     get
  4.     {
  5.         Dao dao = _daoMap[daoInterface] as Dao;
  6.         if (dao == null) 
  7.         {
  8.             throw new DataException("There is no DAO implementation found for " + daoInterface.Name + " in this context.");
  9.         }
  10.         IDao idao = dao.Proxy;
  11.         return idao;
  12.     }
  13. }

iBATIS.NET中動(dòng)態(tài)選擇DAO涉及到的主要的類圖如下:

iBATIS.NET中動(dòng)態(tài)選擇DAO就向你介紹到這里,希望這些對(duì)你有所幫助。


網(wǎng)站名稱:iBATIS.NET中動(dòng)態(tài)選擇DAO淺析
本文來源:http://uogjgqi.cn/article/cdhpddh.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流