分页查询

Java代码

Hibernate4之Criteria接口QBC方式…_Java

 

Hibernate4之Criteria接口QBC方式…_List_02

Hibernate4之Criteria接口QBC方式…_hibernate_03


1. crit = session.createCriteria(Order.class).setMaxResults(10).setFirstResult(1);   
2. crit.list();



条件查询

一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。


Java代码

Hibernate4之Criteria接口QBC方式…_Java

 

Hibernate4之Criteria接口QBC方式…_List_02

Hibernate4之Criteria接口QBC方式…_hibernate_03


1. //Restrictions.like和Restrictions.eq用法   
2. list = s.createCriteria(UserModel.class)     
3.             .add(Restrictions.eq("uuid", "3"))     
4.             .add(Restrictions.like("name", "%n%")).list();     
5.  
6. //Restrictions.or和Restrictions.isNull用法   
7. cats = s.createCriteria(Cat.class)     
8.             .add(Restrictions.like("name", "Fritz%") )     
9.             .add(Restrictions.or(Restrictions.eq("age",new Integer(0)),     
10.                  Restrictions.isNull("age"))).list();   
11.  
12. //Restrictions.lt和Restrictions.in用法   
13. cats = s.createCriteria(Cat.class)    
14.             .add(Restrictions.in("name",new String[]{"Fritz", "Izi","Pk"}))    
15.             .add(   
16.                  Restrictions.disjunction().add(Restrictions.isNull("age"))    
17.                  .add(Restrictions.lt("age", new Integer(100))) //小于   
18.                  .add(Restrictions.le("age", new Integer(0))) //小于或等于   
19.                  .add(Restrictions.gt("age", new Integer(0))) //大于   
20.                  .add(Restrictions.ge("age", new Integer(1))) //大于或等于   
21.                  .add(Restrictions.eq("age", new Integer(2))))).list();




排序

可以使用 org.hibernate.criterion.Order 来为查询结果排序。示例如下:


Java代码

Hibernate4之Criteria接口QBC方式…_Java

 

Hibernate4之Criteria接口QBC方式…_List_02

Hibernate4之Criteria接口QBC方式…_hibernate_03



    1. cats = s.createCriteria(Cat.class)     
    2.             .add(Restrictions.like("name", "F%"))   
    3.             .addOrder(Order.asc("name") )     
    4.             .addOrder(Order.desc("age") )     
    5.             .setMaxResults(50)     
    6.             .list();   
    7.  
    8. cats = s.createCriteria(Cat.class)   
    9.             .add(Property.forName("name").like("F%"))   
    10.             .addOrder(Property.forName("name").asc())   
    11.             .addOrder(Property.forName("age").desc())   
    12.             .setMaxResults(50)   
    13.             .list();   
    14.  
    15. //Restrictions.between用法   
    16. list = session.createCriteria(StockDailyRecord.class).add(Restrictions.between("date", startDate, endDate)).list();




    动态关联抓取


    Java代码

    Hibernate4之Criteria接口QBC方式…_Java

     

    Hibernate4之Criteria接口QBC方式…_List_02

    Hibernate4之Criteria接口QBC方式…_hibernate_03

    1. cats = s.createCriteria(Cat.class)    
    2.             .add( Restrictions.like("name", "Fritz%") )    
    3.             .setFetchMode("mate", FetchMode.EAGER)    
    4.             .setFetchMode("kittens", FetchMode.EAGER)    
    5.             .list();






    Criteria的缺点




    Criteria API同时也带有一些缺点。


    1、性能问题


    没有办法控制由Hibernate生成的SQL查询语句,如果生成的查询语句很慢,我们很难调整,数据库管理员可能非常不喜欢这样。



    2、维护问题


    所有的SQL查询散布在Java代码中,当一个查询出现错误时,我们可能需要花费大量的时间来找出问题所在。换句话说,存储在Hibernate映射文件中的命名查询更容易去维护。


    结论



    没有什么东西是完美的,考虑我们项目的需要,明智地使用它。