使用动态数据库访问对象
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
相关文章推荐
- System.Lazy<T>延迟加载 在很多情况下,有些对象需要在使用时加载或根据逻辑动态加载。有些情况如果不延迟加载,可能会影响效率甚至抛出Timeout Exception。如网络操作、数据库操
- 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型
- 使用ADO.NET访问数据库,类和对象概述
- [2004-8-4]VB.Net学习笔记,使用ADO.Net对象访问数据库,将结果写入ListView
- ZODB入门 -- 如何通过面向对象的动态语言 Python 使用对象数据库
- SQL文的写法, 不使用Use, 访问当前数据库以外的数据库的对象
- 在VB6中动态创建使用ADO控件访问数据库
- 如何在AS3中使用global对象,来动态访问自定义类
- 使用Oracle DBLink进行数据库之间对象的访问操作
- 使用Oracle DBLink进行数据库之间对象的访问操作
- SharePoint 事件 7363:对象缓存:缓存使用的超级读者帐户没有足够的权限访问SharePoint数据库。
- 访问数据库结合使用DataSet对象和DataAdapter对象
- JAVA访问firebird数据库之Jaybird-2.1.6JDK_1.5之综合使用实例
- oracle使用四(数据库对象)
- ADO.NET之4-使用SqlCommand对象向数据库添加记录---ShinePans
- 使用存储过程(PL/SQL)向数据库中存取BLOB对象——图片
- EnterpriseLibrary数据访问 使用存储过程访问数据库
- spring 事务管理 1(使用spring的JdbcTemplate访问数据库)
- 为什么FleaPHP使用Table Data Gateway代替Active Record提供数据库访问服务
- 使用 JDBC 创建数据库对象 1