分页查询的两种方法

一、离线对象
public List<Customer> findList(int begin, int pageSize) {
//使用离线对象进行分页查询
DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Customer.class);
List<Customer> list= (List<Customer>) this.getHibernateTemplate().
  findByCriteria(detachedCriteria, begin, pageSize);
return list;
}
对应SQL语句:select * from t_customer limit begin,pageSize;
但是当分页查询有很多条件时,离线对象做不到,如涉及到多表,此时用HQL语句;
例如 :SELECT p.* FROM product p ,category c , categorysecond cs 
WHERE p.`csid`=cs.`csid` AND cs.`cid`=c.`cid`;
public List<Product> findByPageCid(Integer cid, int begin, int limit) {
String sql = "select p from Product p join p.categorySecond cs join cs.category cwhere c.cid=?";
Session session=this.getSessionFactory().getCurrentSession();
Query query=session.createQuery(sql);
query.setInteger(0, cid);
query.setFirstResult(begin);
query.setMaxResults(limit);

List<Product> list=query.list();
if (list != null && list.size() > 0) {
return list;
}
return null;
}
该用法需要注意几点:
1、HQL语句中 join 会自动 join...on.. ,会自动消除笛卡尔积,不用写那么多and。
2、注意Session的获取方法,要注意配置web.xml的过滤器,详情见文章:当Dao层继承了HibernateDaoSupport,使用底层SQL语句,session获取的方法。
3、HQL语句不能用limit关键字,使用两个方法。
4、HQL语句中,不支持 Select * ,若只想查询Product对象,使用Select(Product的别名),如:select p from Product p join Category c;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值