DAO,即Data Access Object(数据访问对象),是连接持久层和业务逻辑层之间的一层thin layer。
主要的特征有:
1.在DAO层的API应该看不到后端支持系统的细节。因为DAO模式的主要优点就在于修改后端支持系统而不会影响前端系统的代码。
反模式:在DAO层看到大量的SQL语句
2.DAO层的API应该易于使用,为方便开发人员最好使用标准化统一的名字.比如DAO层常用的方法名:create, update, delete,find.
3.DAO层应该不包含任何形式的业务逻辑
反模式:DAO层里大量的IF/ELSE判断
4.DAO层的各方法应该不允许相互调用.尽量保证DAO层各模块的低耦合是很必要的.
反模式:ADao的get()方法调用BDao的find()方法
5.DAO层应避免保存任何形式的状态.可以简单的认为DAO就是连接后端支持系统的桥梁。
反模式:DAO里面定义了一个有状态的实例变量
6.DAO能参与事务控制,但不能初始化一个事务或者终止一个事务的运行。
反模式:在DAO里面用编程式方式启动事务或者关闭事务
JDK5支持泛型,于是泛型DAO就应运而生了。泛型DAO应用在很多敏捷开发框架上。下面是Appfuse的GenericDao:
public interface GenericDao <T, PK extends Serializable> {
List<T> getAll();
T get(PK id);
boolean exists(PK id);
T save(T object);
void remove(PK id);
List<T> getAllDistinct();
List<T> findByNamedQuery(String queryName, Map<String, Object> queryParams);
}