持久化模式,第 2 部分: 提高代码重用和改进性能
2010-04-02 00:00:00 来源:WEB开发网SalaryRate 类继承这些字段并添加一个 yearlyRate 字段,见清单 5:
清单 5. SalaryRate 类
@Entity
@DiscriminatorValue("Salary")
public class SalaryPayRate extends PayRate {
private double yearlyRate;
//...
}
高级的泛型 DAO
随着越来越多的应用程序使用泛型 DAO,您会在数据访问层中发现更多的通用功能。提取通用行为并把它们包含在泛型 DAO 中,让类的所有用户通过泛型 DAO 访问这些功能,这样就可以减少代码重复。
常见的两种通用操作是根据搜索参数执行查询和数据库级的分页。
查询
几乎所有持久化实体都需要某种查询功能。通常通过给对象中要搜索的一个或多个字段输入搜索文本(有时候支持通配符功能)来指定查询。一种查询方法是,创建持久化对象的一个实例,然后填充需要用搜索条件搜索的字段。 Hibernate 通过示例(example) 查询支持这种方式。
图 2 给出扩展的 BaseDao 接口,它支持按示例查询功能:
图 2. 扩展的 BaseDao 接口
在给出这个接口的实现之前,我们先考虑一下如何使用这样的 DAO。请考虑以下代码,这段代码演示了对某个持久化实体执行查询的过程:
Employee example = employeeDao.getNewInstance();
example.setLastName("Smith");
List<Employee> results = employeeDao.getByExample(example);
在 Web 应用程序中,搜索参数可能是代表搜索表单的后端对象,而查询的结果会显示在用户界面上。清单 6 展示了使用 Hibernate 实现 getAllByExample() 方法的方式:
更多精彩
赞助商链接