Hibernate3学习笔记(四) —— Criteria Query

Criteria Query:通过面向对象化的设计,将数据查询条件封装成一个对象。Hibernate在运行期会根据Criteria中指定的查询条件来生成相应的SQL语句。

Criteria本身是一个查询容器,具体查询条件通过Criteria.add()方法添加到Criteria实例中去。

    Criteria crit = session.createCriteria(Class);

    crit.add(Expression.eq("name","LiuYun"));

    list = crit.list();

示例查询:Example,根据已有对象,查询属性中与之相符的其他对象。

    Criteria crit = session.createCriteria(TPerson.class);

    Object obj = new Object();

    crit.add(Example.create(obj));

    list = crit.list();

Hibernate默认会过滤掉实例对象中值为NULL的属性。常用的场景是组合查询,即界面上若干查询选项,然后根据用户的选择返回符合条件的结果。

Criteria 高级特性

限定返回的记录范围、排序

    Criteria crit = session.createCriteria(TPerson.class);

    crit.add(Expression.gt("age",new Integer(20)));

    crit.setFirstResult(10);//从第10条开始显示

    crit.setMaxResult(20);//显示20条数据

    crit.addOrder(Order.desc("name"));//按"name"降序排列

    list = crit.list();//查询结果

分组、统计

    ProjectionList proList = Projections.projectionList ();

    proList.add(Projections.groupProperty("age"));

    proList.add(Projections.rowCount());

    Criteria crit = session.createCriteria(TPerson.class);

    crit.setProjection(proList);

    List list = crit.list();

 

但是Criteria生命周期位于其宿主Session生命周期之内,一旦Session销毁,则Criteria实例也随之失效,这在很大程度上限制了Criteria的重用,利用DetachedCriteria实现Criteria,DetachedCriteria可以脱离Session实例独立存在,这样就可以将某些通用的Criteria查询条件进行抽离,每次使用时再与当前Session实例绑定,从而获得更好的代码重用效果。
Criteria接口继承了CriteriaSpecification接口,DetachedCriteria类实现了CriteriaSpecification接口。
DetachedCriteria detaCriteria = DetachedCriteria.forClass(TPerson.class);//得到DetachedCriteria实例
DetachedCriteria实例可以实现查询子句,需要时再与Session绑定从而获得运行期的Criteria实例。这样查询逻辑与Criteria实例相分离,获得代码重用效果。
 detaCriteria.add(Expression.eq("name","Fang Hewei"));//查询逻辑
 detaCriteria.add(Expression.gt("age", new Integer(20)));
 Criteria crit= detaCriteria.getExecutableCriteria(session);//与Session实例绑定

 List list = crit.list();

你可能感兴趣的:(Hibernate3学习笔记(四) —— Criteria Query)