JSF分页查询方法(2)

JSF分页查询方法(2) 二、获得记录总数 2.1 查询的目的 获得符合条件的记录. 获得符合条件的记录的总数. 2.2 Hibernate查询的实现 2.2.1 获得符合条件的记录. 以Hibernate查询作为例子, 我们对上层(服务层和Web层)提供了一个以上的获取数据记录列表的方法, public List getOaTypealles() { //返回包含所有对象的列表 } public List getOaTypealles(OaTypeall oaTypeall) { //返回长得跟oaTypeall相似的对象的列表, 如可以使用Hihernate的FindByExample方法 } public List getOaTypealles(OaTypeAllQuery oaTypeallQuery) { //返回符合查询条件的对象的列表 } 我们下面就详细解释getOaTypealles(OaTypeAllQuery oaTypeallQuery)方法. 所有的查询属性已经包含在oaTypeallQuery里面了,我们怎么去根据这些条件来做查询呢? Hibernate提供了非常强大的Criteria [读音krai5tiEriE] 接口, 利用它可以很方便的实现查询. ---------------------------------------- //从DAO实现继承的基类获得session Session session = this.getSession(); //获得查询OaTypeall的对象 Criteria criteria = session.createCriteria(OaTypeall.class); //把查询对象oaTypeallQuery中不为空(null或者"")的属性加入查询条件中 if (oaTypeallQuery.getTypename()!=null && !oaTypeallQuery.getTypename().equals("")) { criteria.add(Expression.like("oaTypeallPK.typename","%"+oaTypeallQuery.getTypename()+"%")); } if (oaTypeallQuery.getTypeparent()!=null && !oaTypeallQuery.getTypeparent().equals("")) { criteria.add(Expression.eq("typeparent", oaTypeallQuery.getTypeparent())); } //...其他查询条件 //定位分页第一条记录 criteria.setFirstResult(oaTypeallQuery.getFirstResult()); //获得最多为一页大小的数目的记录 criteria.setMaxResults(oaTypeallQuery.getPageSize()); //把记录放在list列表中 List list = criteria.list(); ---------------------------------------- 2.2.2 获得符合条件的记录的总数. 那记录的总数呢? 是list.size()吗? 不是的, list.size()总是小于等于pageSize的. 难道要删除掉setFirstResult和setMaxResults方法,把所有符合条件的记录 都拿出来放到list再获得list的size吗? 当然不是, 我不管数据表的记录是多是少,都不太 赞成这种做法, 因为这是比较严重的影响服务器性能的做法. Criteria再次显示了它强大的一面, 它提供了投影/聚合查询功能, 可以让我们执行一次count(*) 查询,就可以让数据库返回一个获得符合条件的记录的总数. ---------------------------------------- public int countOaTypealles(OaTypeAllQuery oaTypeallQuery) { //... Session session = this.getSession(); Criteria criteria = session.createCriteria(OaTypeall.class); //投影/聚合, 只要求返回OaTypeall的count数目 criteria.setProjection(Projections.rowCount()); //prepareCriteria(criteria, oaTypeallQuery); //获得count字段的值,放到ret中 Integer ret = (Integer)criteria.uniqueResult(); return ret.intValue(); } ---------------------------------------- 最后执行 oaTypeallQuery.setRecordCount(this.countOaTypealles(oaTypeallQuery)); 把总数赋予oaTypeallQuery对象即可.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值