人无信不立/2008-04-26 22:30
永春阁
专注于技术,切不可沉湎于技术
博客园
社区
首页
新随笔
联系
管理
订阅
随笔- 225 文章- 20 评论- 1257
IBatis.Net学习笔记九--动态选择Dao的设计分析
在IBatis.Net中可以通过配置文件动态选择数据库、动态选择Dao对象。
Dao对象也就是操作数据库的类,通过配置文件我们可以选择DataMapper的方式、Ado的方式、NHibernet的方式以前其他第三方的方式来操作数据库。有利于系统的灵活性和可扩展性。
通过分析动态选择Dao的设计可以加深对IBatis.Net的理解,更好的使用它,同时也可以借鉴它的好的设计模式,应用到我们的程序开发中去。
源代码是最好的分析方式,下面是一些重点代码和说明:
前提:需要在dao.config中配置:
<
daoFactory
>
<
dao
interface
=
"
GSpring.Dao.Interfaces.IAccountDao, GSpring.Dao
"
implementation
=
"
GSpring.Dao.Implementations.AccountDao, GSpring.Dao
"
/>
</
daoFactory
>
在代码中首先需要进行初始化:
DomDaoManagerBuilder builder
=
new
DomDaoManagerBuilder();
builder.Configure(
"
dao.config
"
);
这段代码实际上做了很多事情,其中就有:将所有的配置的dao的接口和实现注册到DaoManager类的静态属性中去。也就是在整个应用程序或网站启动时注册一次就可以了,以后直接从静态属性中取出来使用就可以了。
和dao注册相关的代码如下:
dao.Implementation
=
NodeUtils.GetStringAttribute(prop,
"
implementation
"
);
dao.Interface
=
NodeUtils.GetStringAttribute(prop,
"
interface
"
);
_daoInstance
=
_daoImplementation.GetConstructor(Type.EmptyTypes).Invoke(
null
)
as
IDao;
_proxy
=
DaoProxy.NewInstance(
this
);
也就是把配置文件中的interface和implementation读取,然后生成代理。
最主要的就是最后一句代码,DaoProxy.NewInstance的实现如下:
Castle.DynamicProxy.ProxyGenerator proxyGenerator
=
new
ProxyGenerator();
IInterceptor handler
=
new
DaoProxy(dao);
Type[] interfaces
=
{dao.DaoInterface,
typeof
(IDao)}
;
return
(proxyGenerator.CreateProxy(interfaces, handler, dao.DaoInstance)
as
IDao);
这里我们看到其中使用了Castle.DynamicProxy中的方法(
Castle
是另外一个开源框架,我和在以后的博客中再说)
DaoProxy实现IInterceptor接口,也就是AOP中常有的拦截机。以后当我们通过IDao接口调用实际的Dao时,都会先通过DaoProxy,由DaoProxy拦截后进行一些必要的处理,然后再动态决定调用哪一个Dao来进行数据库操作
生成好之后都会放在DaoManager的静态属性中,下次要用的时候直接从里面去就可以了:
public
IDao
this
[Type daoInterface]
{
get
{
Dao dao
=
_daoMap[daoInterface]
as
Dao;
if
(dao
==
null
)
{
throw
new
DataException(
"
There is no DAO implementation found for
"
+
daoInterface.Name
+
"
in this context.
"
);
}
IDao idao
=
dao.Proxy;
return
idao;
}
}
以上涉及到的主要的类图如下:
posted @ 2007-09-13 13:18
永春
阅读(2097)
评论(2)
编辑
收藏
所属分类:
iBATIS.NET
发表评论
回复
引用
查看
#1楼
2007-09-28 09:56 |
rottenapple
如果运行时更改了sql文,ibatis会自动发现并重新倒入导系统里吗?利用的是sqlmap.config里加入user.xml这种方式
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-09-13 13:30 编辑过
相关文章:
使用Visual Studio2005入门.Net2.0系列视频教程
.NET设计模式系列文章
Microsoft .NET Pet Shop 4 架构与技术分析
Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
prototype.js 1.4版开发者手册(强烈推荐)
.NET设计模式(2):单件模式(Singleton Pattern)
相关链接:
所属分类的其他文章:
IBatis.Net学习笔记十三:在IBatis.Net中调用存储过程
IBatis.Net学习笔记系列文章
IBatis.Net学习笔记十二:发现一个好用的IBatis.Net生成工具
IBatis.Net学习笔记十一:Castle.DynamicProxy的使用
IBatis.Net学习笔记十--数据库连接处理
IBatis.Net学习笔记九--动态选择Dao的设计分析
Ibatis.Net和Ibatis使用注意点及异同点(不断更新)
IBatis.Net学习笔记八--把字段映射成一个自定义对象
IBatis.Net学习笔记七--日志处理
IBatis.Net学习笔记六--再谈查询
最新IT新闻:
淘宝网合并阿里妈妈 专家称阿里巴巴或有新战略
微软研究院发布 AutoCollage - 整理并融合照片
2008年9月5日科技博客精选
SNS网站风靡影响工作效率 公司下令封杀
《孢子》正式发布
博客园新闻频道
博客园首页
社区
公告
本Blog版权均为本人所有,欢迎任何媒体和网站转载本人博客的内容。
本Blog的内容按原样提供,本人不提供任何形式的担保。
转载请注明出处
我的MVP配置
自2007年3月8日:
系列文章
1、
Sharepoint2007对象模型系列
2、
C#强化系列文章
3、
MOSS SDK学习系列
4、
IBatis.Net学习笔记系列
5、
MonoRail学习笔记系列
我的最新闪存
君子终日乾乾,夕惕若。厉无咎
8-26 18:23
<
2007年9月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参加的小组
写书译书小组
Debug 探索团队小组
iBATIS.NET
MonoRail
博客园精华集出版小组
我参与的团队
SharePoint团队(0/731)
Ajax&Atlas技术团队(0/1149)
南京.net俱乐部(0/448)
ASP.NET AJAX (Atlas)学习(0/1346)
MVP(微软最有价值专家)团队(0/566)
Debug 探索团队(0/50)
博客园精华集出版(0/43)
随笔分类
.Net(49)
(rss)
AJax(3)
(rss)
C++/VC学习(2)
(rss)
iBATIS.NET(15)
(rss)
Java(6)
(rss)
MonoRail(25)
(rss)
OS Shell(5)
(rss)
SharePoint(42)
(rss)
Windows Server(1)
(rss)
XHTML/CSS/Script(6)
(rss)
企业开发(2)
(rss)
数据库(20)
(rss)
外语(1)
(rss)
项目管理(7)
(rss)
娱乐/杂记/修养(49)
(rss)
随笔档案
2008年8月 (3)
2008年7月 (7)
2008年6月 (1)
2008年5月 (2)
2008年4月 (12)
2008年3月 (14)
2008年2月 (3)
2008年1月 (14)
2007年12月 (17)
2007年11月 (21)
2007年10月 (31)
2007年9月 (13)
2007年8月 (25)
2007年7月 (10)
2007年6月 (1)
2007年5月 (2)
2007年4月 (10)
2007年3月 (15)
2007年2月 (7)
2007年1月 (1)
2006年12月 (3)
2006年11月 (21)
2006年10月 (5)
2006年8月 (2)
SharePoint学习
Codeplex Sharepoint
jianyi @ cnblogs
Kaneboy's Blog
Patrick Tisseghem's Blog
管理相关
下载_中计在线
中国管理之家
开源社区
C#开源资源大全
Java开源大全
SourceForge主页
门户网站
南京程序员俱乐部
积分与排名
积分 - 287949
排名 - 101
最新评论
1. re: C#强化系列文章六:应用程序域(AppDomain)浅析
还是有一点不懂!mark!!以后再看! (谢小妹)
2. re: 为什么要使用MonoRail?
@拼命三郎
不客气-_- (永春)
3. re: 为什么要使用MonoRail?
我个人还是比较怀念webform,对mvc没有什么学习,毕竟微软的技术层出不穷,有些跟不上了。 (拼命三郎)
4. re: 项目经理的个人修养
第一点吧敢苟同,项目经理其实也又不懂技术的,只是很多公司把项目经理都看成技术过硬的人了。项目经理更多是管行政的、管进度,而架构师承担着管理技术的角色。很多小公司都把这两者结合了。 (拼命三郎)
5. re: [转载]最经典,最可怕的qq聊天记录
哈,好怕怕。。。 (拼命三郎)
阅读排行榜
1. 这样的面试题你会吗?(4717)
2. 年终个人总结:我这五年(3965)
3. Asp.Net Forms验证(自定义、角色提供程序、单点登录)(3956)
4. 易经杂说—南怀瑾(3927)
5. 为什么要使用MonoRail?(3764)