您的位置:首页 > 数据库

使用动态数据库访问对象

2008-06-19 03:08 423 查看

前两天看到Warp framework的介绍,它基于Google Guice,是一个轻量级的web开发框架。它的Dynamic finder特性实在让人兴奋,代码非常简单,支持注入,大大简化了DAO层的开发。下面看看它的几个例子吧:

@Finder(query="from Person")

@Finder(query="from Person where firstName = :firstName")
Person find(@Named("firstName") String name);
还有更简单的吗?
在以往的开发过程中,为了层次清晰,易于测试,通常会将业务逻辑层和数据库访问层分开。看下面的例子

public class UserService
[DomainType(typeof(Customer))]
public interface ICustomDAO

如何使用呢?下面是使用Spring.Net的GetObject,自然也可以注入到其他对象中去比如Service层。

IApplicationContext ctx = ContextRegistry.GetContext();
ICustomDAO dao = (ICustomDAO) ctx.GetObject("userDAO");

IList<Customer> customers = dao.FindUserByName("Hardy");
foreach (var customer in customers)
<objects xmlns="http://www.springframework.net">
<object id="userDAO" type="DAODemo1.DAOFactoryObject">
<property name="DAOName" value="DAODemo1.ICustomDAO"></property>
<property name="ContextFactory" ref="ctxFactory"></property>
</object>
<object id="ctxFactory" type="DAODemo1.DefaultDataContextFactory">
<property name="DataContextName" value="DAODemo1.NorthWindDataContext"></property>
</object>
</objects>

ctxFactory对象是创建DataContext对象的工厂,DataContextName是指你要使用的是哪个DataContext,这里是NorthwindDataContext,针 对不同的DAO有不同的配置。


userDAO是生成出来的DAO对象,可以看到它的type指向的是DAOFactoryObject,其实创建出来的是个动态代理对象。DAOName
指的是对哪个DAO接口进行代理。这个动态代理对象的所有方法调用都被拦截,根据attribute的不同分派做不同的处理。
下面是源码,十分简陋,也请各位高人多多指教。
DAODemo1.zip
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐