zoukankan      html  css  js  c++  java
  • criteria用法

    Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如:


    Java代码   
    Criteria criteria = session.createCriteria(User.class);

    criteria.add(Expression.eq("name","Erica"));

    criteria.add(Expression.eq("sex",new Integer(1)));

    Criteria 查询表达式

    Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。 如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,Expression提供了对应的查询限定机制,包括:


    Java代码


    Expression.eq 对应SQL“field = value”表达式。 如Expression.eq("name","Erica")

    Expression.allEq 参数为一个Map对象,其中包含了多个属性-值对应关系。相当于多个Expression.eq关系的叠加。

    Expression.gt 对应SQL中的 “field > value ” 表达式

    Expression.ge 对应SQL中的 “field >= value” 表达式

    Expression.lt 对应SQL中的 “field < value” 表达式

    Expression.le 对应SQL中的 “field <= value” 表达式

    Expression.between 对应SQL中的 “between” 表达式

    如下面的表达式表示年龄(age)位于13到50区间内。


    Java代码 
    Expression.between("age",new Integer(13),new Integer(50));

    表达式


    Java代码


    Expression.in 对应SQL中的 ”field in …” 表达式

    Expression.eqProperty 用于比较两个属性之间的值,对应SQL中的“field = field”。 如:

    Expression.eqProperty( "TUser.groupID", "TGroup.id" );

    Expression.gtProperty 用于比较两个属性之间的值,对应SQL中的“field > field”。

    Expression.geProperty 用于比较两个属性之间的值,对应SQL中的“field >= field”。

    Expression.ltProperty 用于比较两个属性之间的值,对应SQL中的“field < field”。

    Expression.leProperty 用于比较两个属性之间的值,对应SQL中的“field <= field”。

    Expression.and and关系组合。 如:

    Expression.and( Expression.eq("name","Erica"), Expression.eq( "sex", new Integer(1) ) );

    Expression.or or关系组合。 如:

    Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );


    Expression.sql 作为补充,本方法提供了原生SQL语法的支持。我们可以通过这个方法直接通过SQL语句限定查询条件。 下面的代码返回所有名称以“Erica”起始的记录:


    Java代码 
    Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );   
    Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );

    其中的“{alias}”将由Hibernate在运行期使用当前关联的POJO别名替换。 注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里 所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实际字段名称。

    Criteria 高级特性

    限定返回的记录范围

    通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回的记录范围:


    Java代码 
    Criteria   criteria = session.createCriteria(TUser.class);    
      
    //限定查询返回检索结果中,从第一百条结果开始的20条记录    
      
    criteria.setFirstResult(100);    
      
    criteria.setMaxResults(20);    
      
    对查询结果进行排序    
      
    //查询所有groupId=2的记录    
      
    //并分别按照姓名(顺序)和groupId(逆序)排序    
      
    Criteria  criteria = session.createCriteria(TUser.class);    
      
    criteria.add(Expression.eq("groupId",new Integer(2)));    
      
    criteria.addOrder(Order.asc("name"));    
      
    criteria.addOrder(Order.desc("groupId"));  


    Criteria criteria = session.createCriteria(TUser.class);

    //限定查询返回检索结果中,从第一百条结果开始的20条记录

    criteria.setFirstResult(100);

    criteria.setMaxResults(20);

    对查询结果进行排序

    //查询所有groupId=2的记录

    //并分别按照姓名(顺序)和groupId(逆序)排序

    Criteria criteria = session.createCriteria(TUser.class);

    criteria.add(Expression.eq("groupId",new Integer(2)));

    criteria.addOrder(Order.asc("name"));

    criteria.addOrder(Order.desc("groupId"));


    更详细的的内容 
    http://docs.huihoo.com/hibernate/reference-v3_zh-cn/querycriteria.html

  • 相关阅读:
    HDU 5492 Find a path
    codeforce gym 100548H The Problem to Make You Happy
    Topcoder SRM 144 Lottery
    codeforce 165E Compatible Numbers
    codeforce gym 100307H Hack Protection
    区间DP总结
    UESTC 1321 柱爷的恋爱 (区间DP)
    HDU 4283 You Are the One (区间DP)
    HDU 2476 String painter (区间DP)
    UESTC 426 Food Delivery (区间DP)
  • 原文地址:https://www.cnblogs.com/ConfidentLiu/p/7567735.html
Copyright © 2011-2022 走看看