持久化模式,第 1 部分: 现代 ORM 工具的策略和最佳实践
2010-04-02 00:00:00 来源:WEB开发网清单 5. 通过服务直接使用泛型 DAO
BaseDao<Employee> dao = new BaseDao<Employee>();
dao.setQueryClass(Employee.class);
dao.setSessionFactory(sessionFactory);
...
dao.getById(-1L);
如果查询需要更复杂的数据集,那么可以从泛型 DAO 派生出子类。例如,假设希望找到在 Iowa 生活的所有全职职员。为此,需要定义一个与 Employee 相关的 DAO 方法,findIowaEmployees。如果创建一个扩展 BaseDAO 的新的 EmployeeDAO,EmployeeDAO 可以执行特定的全职职员查询,还可以执行泛型 DAO 提供的所有基本查询,见清单 6:
清单 6. 从泛型 DAO 派生出子类
public class EmployeeDao extends BaseDaoImpl<Employee> {
public EmployeeDao() {
setQueryClass(Employee.class);
}
List<Employee> findIowaEmployees() {
Criteria crit = getCurrentSession().createCriteria(getQueryClass());
crit.createCriteria("address").add(Restrictions.eq("state", "IA"));
return crit.list();
}
}
注意,清单 6 使用 createCriteria() 方法。它是另一个在企业应用程序的 DAO 中常常重复出现的方法。在使用泛型 DAO 的过程中,您会发现新的通用操作,可以把它们添加到泛型 DAO 中,从而增强可重用性并减少重复。第 2 部分 将详细描述其他一些通用方法,比如启用真正的分页和处理搜索参数。
审计
基本审计是以数据库为中心的应用程序中的常见特性之一。大多数应用程序都需要记录审计信息,比如何时创建了对象、谁创建了对象、何时修改了对象以及谁修改了对象。这些特性的建模并不困难。要求审计的任何对象只需要增加 4 个字段,每个字段存储一种审计信息。图 1 为包含审计字段的持久化实体提供了一个基类。这个特性比较难的部分是,决定在代码中的什么地方设置审计信息。有几个选择:
更多精彩
赞助商链接