使用Criteria进行条件查询
Criteria接口和Query接口十分类似,它允许创建并执行面向对象的标准化查询。
值得注意的是Query接口也是轻量级的,它不能再Session之外使用。
Hibernate提供了直观的Criteria查询API
创建Criteria实例
Criteria criteria=session.createCriteria(User.class);//参数为可持久化类
可以进行添加查询条件、排序条件,显示最大数值等等再使用list或者其他与hql中类似的方法获取值。
demo1:
session=HibernateSessionFactory.getSession(); Criteria criteria=session.createCriteria(Person.class); List<Person> persons=criteria.list(); return persons;
demo2:
session=HibernateSessionFactory.getSession(); Criteria criteria=session.createCriteria(Person.class); criteria.setFirstResult(0); criteria.setMaxResults(2); List<Person> persons=criteria.list(); return persons;
添加查询条件
查询条件通过org.hibernate.criterion.Restrictions类来实现的,用来模拟SQL语句中的关键字,例如like、between、and、or等。调用Criteria的add()来添加多个Restrictions实例。
public List<Student> CriteriaTest1(){ session=HibernateSessionFactory.getSession(); Criteria criteria=session.createCriteria(Student.class); criteria.add(Restrictions.like("name", "guozhen")); List<Student> s=criteria.list(); return s; }
public List<Student> CriteriaTest1(){ session=HibernateSessionFactory.getSession(); Criteria criteria=session.createCriteria(Student.class); //criteria.add(Restrictions.like("name", "guozhen")); criteria.add(Restrictions.between("id", 2, 4)); List<Student> s=criteria.list(); return s; }
Hibernate提供了相当多的内置Criterion类型,但是尤其可用的是可以允许直接使用SQL。
session=HibernateSessionFactory.getSession(); Criteria criteria=session.createCriteria(Student.class); //criteria.add(Restrictions.like("name", "guozhen")); //criteria.add(Restrictions.between("id", 2, 4)); criteria.add(Restrictions.sqlRestriction("name = lower(?)","liulinghui",Hibernate.STRING)); List<Student> s=criteria.list(); return s;
添加排序条件
可以使用org.hibernate.criterion.Order来为查询结果排序,它公包含两个方法asc()和desc().通过调用criterion的addOrder()来添加多个Order实例。
public List<Student> CriteriaTest1(){ session=HibernateSessionFactory.getSession(); Criteria criteria=session.createCriteria(Student.class); //criteria.add(Restrictions.like("name", "guozhen")); //criteria.add(Restrictions.between("id", 2, 4)); //criteria.add(Restrictions.sqlRestriction("name = lower(?)","liulinghui",Hibernate.STRING)); criteria.addOrder(Order.asc("age")); criteria.addOrder(Order.desc("id")); List<Student> s=criteria.list(); return s; }