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

iBATIS.NET中動態選擇DAO淺析

開發 后端
iBATIS.NET中動態選擇DAO是如何執行的呢?本文將向你介紹在iBATIS.NET中如何進行動態選擇DAO的。

在iBATIS.NET中可以通過配置文件動態選擇數據庫、動態選擇Dao對象。

Dao對象也就是操作數據庫的類,通過配置文件我們可以選擇DataMapper的方式、ADO的方式、NHibernet的方式以前其他第三方的方式來操作數據庫。有利于系統的靈活性和可擴展性。

通過分析動態選擇Dao的設計可以加深對iBATIS.NET的理解,更好的使用它,同時也可以借鑒它的好的設計模式,應用到我們的程序開發中去。

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

iBATIS.NET中動態選擇DAO前提:需要在dao.config中配置:

  1. <daoFactory>  
  2.         <dao interface="GSpring.Dao.Interfaces.IAccountDao, GSpring.Dao" implementation="GSpring.Dao.Implementations.AccountDao, GSpring.Dao"/>  
  3. </daoFactory> 

iBATIS.NET中動態選擇DAO在代碼中首先需要進行初始化:

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

這段代碼實際上做了很多事情,其中就有:將所有的配置的dao的接口和實現注冊到DaoManager類的靜態屬性中去。也就是在整個應用程序或網站啟動時注冊一次就可以了,以后直接從靜態屬性中取出來使用就可以了。

和dao注冊相關的代碼如下:

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

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

iBATIS.NET中動態選擇DAO最主要的就是最后一句代碼,DaoProxy.NewInstance的實現如下:

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

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

DaoProxy實現IInterceptor接口,也就是AOP中常有的攔截機。以后當我們通過IDao接口調用實際的Dao時,都會先通過DaoProxy,由DaoProxy攔截后進行一些必要的處理,然后再動態決定調用哪一個DAO來進行數據庫操作。

生成好之后都會放在DaoManager的靜態屬性中,下次要用的時候直接從里面去就可以了:

  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.     }  

iBATIS.NET中動態選擇DAO涉及到的主要的類圖如下:

動態選擇DAO主要類圖

iBATIS.NET中動態選擇DAO就向你介紹到這里,希望這些對你有所幫助。

【編輯推薦】

  1. iBATIS with MapBean應用淺析
  2. iBATIS.NET常用的查詢方式淺析
  3. iBATIS.NET中的多表查詢方法淺析
  4. iBATIS.NET日志處理淺析
  5. iBATIS.NET字段映射自定義對象淺析
責任編輯:仲衡 來源: cnblogs
相關推薦

2009-07-22 09:07:01

iBATIS.NET

2009-07-20 13:22:47

iBATIS.Net日

2009-07-20 10:06:07

iBATIS.net查詢方式

2009-07-21 13:50:00

iBATIS.NET調

2009-07-20 09:27:42

IBATIS.netDAO

2009-07-21 15:21:59

iBATIS.NET多

2009-07-20 09:51:19

iBATIS.net數據庫緩存

2009-07-16 13:50:31

ibatisResultMap

2009-07-16 09:14:26

iBATIS DAO

2009-07-20 18:00:16

iBATIS DAO事

2009-07-20 13:47:08

iBATIS.NET字

2009-07-20 15:14:44

iBATIS.NET連

2009-07-21 16:30:15

iBATIS.NET與單元測試

2009-07-21 11:17:46

iBATISDAO的配置

2009-07-20 15:27:22

Castle.DynaiBATIS.NET

2009-07-15 17:58:07

iBATIS 動態映射

2009-07-22 14:28:52

iBATIS.NET配

2009-07-21 17:06:35

iBATIS.NET執

2009-07-22 14:11:09

配置ibatis.neiBatis.net配

2009-07-21 14:15:00

iBATIS.NET多
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩中 | 欧美性久久 | 99看片网| 精品不卡 | 精品一区二区免费视频 | 中文字幕专区 | 国产精品综合一区二区 | 欧美日韩一区二区三区四区 | 日韩欧美在线免费观看 | 中文字幕av亚洲精品一部二部 | 日韩一区二区视频 | 国产精品成人一区二区三区夜夜夜 | 国产伦精品一区二区三区精品视频 | 美女福利网站 | 国产成人a亚洲精品 | 亚洲精久 | 波多野吉衣在线播放 | 在线视频 亚洲 | 亚洲成人av在线播放 | 天堂资源最新在线 | 中文字幕精品一区 | 亚州国产| 91精品国产91久久久久久吃药 | 亚洲电影一级片 | 欧美一区二区在线播放 | 成人免费看片又大又黄 | 国产一区二区视频在线 | 国产精品久久久久久福利一牛影视 | 黄色av免费 | 亚洲日本激情 | 夜夜草天天草 | 在线视频国产一区 | 久久中文字幕一区 | 中文字幕欧美日韩 | 亚洲国产成人精品女人 | 日韩成人影院在线观看 | 国产精品一区二区免费 | 国偷自产av一区二区三区 | 成人午夜影院 | 亚洲成人国产综合 | 久久爱黑人激情av摘花 |