写在前面
Hibernate常用的有两种方式;一种是criteria分页,另一种是hql分页。下面分别介绍:
criteria分页查询
使用Criteria查询数据,这种方式不需要写hql语句,Restrictions带有很多的查询条件如or,in都有相应支持。
Session session = HibernateUtil.getSession();
Criteria c=session.createCriteria(StudentInfo.class);
//c.add(Restrictions.eq("username", "Jerry"));
c.add(Restrictions.or(Restrictions.lt("fid", 5)));
//从第一条开始查询,(这里设置的时查询的起始位置)
c.setFirstResult(0);
//每次查询10条数据
c.setMaxResults(10);
List<StudentInfo> all = c.list();
还有一种简单的方法:
//加载数据库对象
DetachedCriteria criteria = DetachedCriteria.forClass(Product.class);
//加载查询条件
criteria.add(Restrictions.eq("is_hot", 1)); //1 代表是热门商品 ; 0 代表不是热门商品
//按照倒序排列
criteria.addOrder(Order.desc("pdate"));
//分页查询
this.getHibernateTemplate().findByCriteria(criteria,0,10);
hql分页
在开始之前介绍一下Hql的一些技巧,hql的带参数查询有一个小小的技巧,可以不用索引的方式
String hql = "update StudentInfo set username=? where fid=?";
Query q=session.createQuery(hql);
q.setString(0, "Jerry");
q.setInteger(1, 3);
上面的这个是原始的写法,还有一种更好使的就是把问号的地方换成 :参数的名称 ,这样就不用怕记错顺序了。
Query q=session.createQuery("update StudentInfo set username=:username where fid=:fid");
q.setString("username", "Jerry");
q.setInteger("fid", 3);
下面正式介绍Hql分页查询:
String hql="select eage from Emp order by eage";
Query query= session. createQuery(hql). setFirstResult(0). setMaxResults(5); //从0开始,现实5条数据。
还可以使用limit来进行分页查询:
select * from userlist order by userId limit n,m;
//其中n是起始的位置,m是结束的位置(包括第n条,但是不包括第m条)