WEB开发网
开发学院软件开发Java 持久化模式,第 2 部分: 提高代码重用和改进性能 阅读

持久化模式,第 2 部分: 提高代码重用和改进性能

 2010-04-02 00:00:00 来源:WEB开发网   
核心提示: 清单 6. getAllByExample 方法的实现 List<B>getAllByExample(Bexample){Criteriacriteria=getCurrentSession().createCriteria(getQueryClass());ExamplehibEx

清单 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(); 
} 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:持久化 模式 部分

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接