知识大全 使用动态数据库访问对象
Posted 数据库
篇首语:人格成熟的重要标志:宽容、忍让、和善。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用动态数据库访问对象相关的知识,希望对你有一定的参考价值。
前两天看到Warp framework的介绍 它基于Google Guice 是一个轻量级的web开发框架 它的Dynamic finder特性实在让人兴奋 代码非常简单 支持注入 大大简化了DAO层的开发 下面看看它的几个例子吧:
@Finder(query= from Person ) public List<Person> listAll() return null;
@Finder(query= from Person where firstName = :firstName ) Person find(@Named( firstName ) String name);
还有更简单的吗
在以往的开发过程中 为了层次清晰 易于测试 通常会将业务逻辑层和数据库访问层分开 看下面的例子
public class UserService public UserService(IUserDAO userDAO)为什么要这样做呢好处是 userDAO能够依赖注入 使用IOC框架管理 对UserService进行单元测试 userDAO使用mock工具创建 这样避免了要单元测试还得生成真实数据的问题
但是这样就产生了一个问题 大部分数据表都会有这么一个DAO对象存在 使得DAO层过于庞大 当然如果使用泛型的DAO或者抽象出基类就能使代码量减少 这样也不能解决根本问题 Warp提出的Dynamic finder 让人着实兴奋 自己根本就不需要逐个DAO去实现 只需要方法声明+annotation
这么好的想法怎么能不采用呢 于是我花了几个小时试着用C#来实现 并且结合了Linq To Sql 如果直接使用SqlCommand来操作数据库填充实体 实现起来会更加简单 现在用Linq To Sql的人越来越多 就结合著来写的 结果还不错 代码看着的确简洁了很多 就是接口+Attribute 我使用的数据库是Northwind Customer是Linq To Sql生成出来的 EntityType是用来标识对那个实体类进行操作 Find用来标识根据主键查找对象的方法 Delete表示是删除一个实体 Create表示创建一个实体 Query表示自定义的查询字符串 现在只是最简单实现 以后可以提供更复杂的查询条件和写法
cha138/Article/program/net/201311/15442相关参考