• QBC查询.


     1、基本语法

    session.beginTransaction();
    Criteria criteria = session.createCriteria(Person.class);
    SimpleExpression gt = Restrictions.eq("name","张三");
    criteria.add(gt);
    List<Person> list = criteria.list();
    A、Criteria setFirstResult(int firstResult):设置查询返回的第一行记录(索引从0开始);
     
    B、Criteria setMaxResult(int maxResult):设置查询返回的记录数;
     
    C、Criteria add(Criterion criterion):增加查询条件
     
    D、Criteria addOrder(Order order):增加排序规则,例如addOrder(Order.desc("type"));
     
    E、static eq | ne | gt | ge | lt | le(String propertyName,Object value),判断指定属性值是否等于,不等于,大于,大于等于,小于,小于等于指定值
     
    F、static Criterion between(String propertyName,Object lo,Object hi)判断属性值在某个值范围之内
     
    G、static Criterion like(String propertyName,Object value),判断属性值匹配某个字符串,不区分大小写,条件字符串要不是完整的字符串去匹配,要不采用%通配符进行匹配
     
    H、static Criterion ilike(String propertyName,String value,MatchMode matchMode),判断属性值匹配某个字段,不区分大小写,模式是以判断以某个字符串开头或者结尾等,这个匹配字符串可以是整个值的字符串,也可以是其中的一部分,也可以使用%通配符.

    MatchMode.START:字符串在最前面的位置.相当于"like 'key%'"
    MatchMode.END:字符串在最后面的位置.相当于"like '%key'"
    MatchMode.ANYWHERE:字符串在中间匹配.相当于"like '%key%'"
    MatchMode.EXACT:字符串精确匹配.相当于"like 'key'

    J、static Criterion in(String propertyName,Collection values)判断属性值在在某个集合内
     
    K、static Criterion in(String propertyName,Object[] values)判断属性值是数组元素的其中之一
     
    L、static Criterion isNull(String propertyName) 判断属性值是否为空
     
    M、static Criterion sqlRestriction(String sql)直接使用sql语句作为筛选条件,例如:.add(Restrictions.sqlRestriction("type > 15"))
     
    N、static Criterion not(Criterion expression)  对Criterion求反,两个条件进行嵌套,例如.add(Restrictions.not(Restrictions.eq("name", "cname")))

    2、关联与动态关联

    1> Criteria createCriteria(String associationPath):使用默认的连接方式进行关联
     
    2> Criteria createCriteria(String associationPath,JoinType joinType):以JoinType指定的连接方式进行关联;支持INNER_JOIN、LEFT_OUTER_JOIN、RIGHT_OUTER_JOIN、FULL_JOIN等枚举值;
     
    3> Criteria createCriteria(String associationPath,String alias):该方法的功能与第一个方法的功能基本相似,只是该方法允许为关联实体指定别名;
     
    4> Criteria createCriteria(String associationPath,String alias,JoinType joinType):该方法的功能与第二个方法的功能基本相似,只是该方法允许为关联实体指定别名;
     
    5> Criteria createCriteria(String associationPath,String alias,JoinType joinType,Criterion withClause):该方法的功能最强大,该方法既可为关联实体指定别名,也可指定连接类型,还可以通过withClause指定自定义的连接条件---这个可用于实现非等值连接;
     
    createAlias()方法并不是创建一个新的Criteria实例,他只是给关联实体(包括集合里包含的关联实体)起一个别名,让后面的过滤条件可根据该关联实体进行筛选;
     
    Criteria criteria = session.createCriteria(Student.class,"s");
    criteria.add(Restrictions.eq("id",1));
    List list = criteria.createCriteria("room","r",JoinType.INNER_JOIN).list();
    for (Object object : list){
              Student student=(Student)object;
               System.out.println(student.getName());
               System.out.println(student.getId());
               ClassRoom room = student.getRoom();
               System.out.println(room.getId());
               System.out.println(room.getName());
       }

    3、投影、聚合和分组

    Hibernate 的条件过滤中使用 Projection 代表投影运算,Projection 是一个接口,而 Projections 作为 Projection 的工厂,负责生成 Projection 对象;
     
    一旦产生了 Projection 对象之后,就可以通过 Criteria 提供的 setProjection(Projection projection) 方法来进行投影运算。
     
    1> AggregateProjection avg(String propertyname):计算特定属性的平均值,类似于avg函数;
     
    2> CountProjection count(String propertyname):统计查询结果在某列上的记录条数,类似于count(column)函数;
     
    3> CountProjection countDistinct(String propertyname):统计查询结果在某列上不重复的记录条数,类似于count(distinct column)函数;
     
    4> PropertyProjection groupProperty(String propertyname):将查询结果按某列上的值进行分组,类似于添加group by子句;
     
    5> AggregateProjection max(String propertyname):统计查询结果在某列上的最大值,类似于max函数;
     
    6> AggregateProjection min(String propertyname):统计查询结果在某列上的最小值,类似于min函数;
     
    7> Projection rowCount():统计查询结果的记录条数,类似于count(*)的功能;
     
    8> AggregateProjection sum(String propertyname):统计查询结果在某列上的总和,类似于sum函数;
     
     //使用createCriteria开始条件查询  
    List list = sess.createCriteria(Enrolment.class)  
                          .createAlias("student", "s")  
                          .setProjection(Projections.projectionList()  
                             //统计记录条数  
                           .add(Projections.rowCount())  
                              //统计选择该课程里最大的学生姓名  
                            .add(Projections.max("s.name"))  
                             //按照course进行分组  
                            .add(Projections.groupProperty("course")))  
                             .list();  
  • 相关阅读:
    删除代码中的空行
    Amazon Payment Amazon Flexible Payments Service (Amazon FPS) 示例代码的一个bug提醒
    一个关于SqlServer 中根据概率获取数据的sql 写法
    linq 排序 List<T>类型数据
    OpenSmtp附件中文名显示问题
    体积网格生成浏览器
    有关Lemek's algo中,除了Initial Ray外Second Ray是不可能出现(W0,W1,W2,。。。Z0均严格>0)的证明
    Shape Match 的方法效果极差 气死我了
    所谓“中国学生数学NB”的神话
    基于tetrahedron的柔体
  • 原文地址:https://www.cnblogs.com/jmcui/p/6883663.html
Copyright © 2020-2023  润新知