持久化模式,第 2 部分: 提高代码重用和改进性能
2010-04-02 00:00:00 来源:WEB开发网清单 6. getAllByExample 方法的实现
List<B> getAllByExample(B example) {
Criteria criteria = getCurrentSession().createCriteria(getQueryClass());
Example hibExample = Example.create(example);
return criteria.add(hibExample).list();
}
这种方式的优点在于,它能够显著减少代码。不但通过使用泛型 DAO 减少了 DAO 代码,还可以创建通用的 UI 模板代码,这种代码不知道所查询和显示的数据的类型。它只知道需要从 UI 收集某些数据并使用这些数据执行查询,然后把结果显示给用户。
分页
在执行产生大型结果集的数据库查询时,常常对结果进行分页,然后让用户在页面之间导航。有两种实现分页的方式。第一种是执行查询,从数据库获得完整的结果集,然后每次只向用户显示结果集中的一页。由于要传输完整的结果集并把它存储在用户会话中,这种方式需要成本。
另一种方式是在数据库中执行分页。这会减少资源消耗,但是需要比较复杂的编程模型。幸运的是,通过扩展泛型 DAO 可以使这种功能适应各种对象类型。图 3 给出了进一步扩展的 BaseDao 接口:
图 3. 支持分页的 BaseDao 接口
图 3 引入了 PageInfo 类,这个类识别应该获取的数据页面。getPageAll 方法的实现见清单 7:
清单 7. getPageAll 方法的实现
public List<B> getPageAll(PageInfo pageinfo) {
return getCurrentSession().createCriteria(getQueryClass()).
setFirstResult(pageinfo.getFirstRow()).
setMaxResults(pageinfo.getMaxResults()).list();
}
更多精彩
赞助商链接