使用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;
View Code

demo2:

session=HibernateSessionFactory.getSession();
        Criteria criteria=session.createCriteria(Person.class);
        criteria.setFirstResult(0);
        criteria.setMaxResults(2);
        List<Person> persons=criteria.list();
        return persons;
View Code

添加查询条件

查询条件通过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;
    }
View Code
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;
    }
View Code

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;
View Code

添加排序条件

可以使用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;
    }
View Code

 

posted @ 2016-04-29 19:36  guodaxia  阅读(225)  评论(0编辑  收藏  举报