Criteria本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。
Criteria接口有很多重要的方法,如:
1、获取唯一结果的uniqueResult()
2、可实现分页的setFirstResult()和setMaxResult()方法
3、addOrder()排序方法
4、add()关联
第一步,创建一个Criteria实例
org.hibernate.Criteria接口表示特定持久类的一个查询。Session是Criteria实例的工厂。
Criteria c = Sessioin().createCriteria(Hrm.class);
c.setMaxResult(50);
第二步,org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。
    c.add( Restrictions.like("name", "Fritz%") );
     .add( Restrictions.or(Restrictions.eq( "age", new Integer(0) ),
           Restrictions.isNull("age")) );
     .add( Restrictions.in( "name", new String[]{"Fritz","Izi"}));
     .add( Restrictions.ge("createDate",createDateF));
     .add( Restrictions.le("createDate",createDateT));
     .add( Restrictions.between("age",13,50));
    c.addOrder( Order.asc("name"));

第三步,很重要,利用org.hibernate.criterion.Projections来增加查询字段。
   ProjectionList projectionList = Projections.projectionList();   
       projectionList.add(Projections.property("name"));
       projectionList.add(Projections.sum("age"));
       projectionList.add(Projections.groupProperty("name")); 
       c.setProjection(projectionList); //别忘了加
  List list = c.list();
以上几步等同于生成如下SQL: select name,sum(age) from hrm h where  h.name like "Fritz%" or  age = 0 and name in ("Fritz","Izi") and h.create_date >= createDateF and h.create_date <= createT and h.age between 13 and 50  group by h.name order by h.name.
总结,以上sql是错误的无法运行,在这里只是说明Criteria的用法,其封装后生成的sql语句是如此。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐