QBC查询

简介:

1、基本语法

 

1
2
3
4
5
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实例,他只是给关联实体(包括集合里包含的关联实体)起一个别名,让后面的过滤条件可根据该关联实体进行筛选;

 

1
2
3
4
5
6
7
8
9
10
11
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函数;

 

1
2
3
4
5
6
7
8
9
10
11
//使用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(); 

  

      本文转自zsdnr  51CTO博客,原文链接:http://blog.51cto.com/12942149/1932738,如需转载请自行联系原作者






相关文章
|
9月前
|
存储 缓存 数据库
提高Djang查询速度的9种方法
在Web应用程序中,数据库查询是一个关键的环节。优化数据库查询可以显著提高应用程序的性能和响应速度。Django作为一个高度可扩展的Web框架,提供了多种方式来优化数据库查询。本文将介绍一些常用的Django数据库查询优化技巧,从入门到精通,帮助您构建高效的应用程序。
111 1
|
SQL Oracle 关系型数据库
Oracle简单查询、条件查询、枚举查询、模糊查询、排序查询、函数查询等
Oracle简单查询、条件查询、枚举查询、模糊查询、排序查询、函数查询等
244 0
Oracle简单查询、条件查询、枚举查询、模糊查询、排序查询、函数查询等
|
缓存 自然语言处理 网络架构
Elasticearch 查询详解 (二)
elk官网: [https://www.elastic.co/guide/en/enterprise-search-clients/index.html](https://www.elastic.co/guide/en/enterprise-search-clients/index.html) 作者主页:https://www.couragesteak.com/
Elasticearch 查询详解 (二)
|
C++
202009-1称检测点查询
202009-1称检测点查询
59 0
202009-1称检测点查询
小技巧 - 如何查询医保卡号?
小技巧 - 如何查询医保卡号?
1298 0
小技巧 - 如何查询医保卡号?
|
SQL 关系型数据库 MySQL
五、简单查询
五、简单查询
120 0
|
SQL
【查询】查询好像也可以很简单!
     还是要先说一下范围:以数据库为主的程序,b/s结构。        查询嘛,对于我来说就是SQL语句 where 后面(group、order by 前面的)的内容,把这搞定了,查询也就搞定了。
802 0
|
JavaScript 索引
查询
find简介 MonngoDB中使用find来进行查询。查询就是返回集合文档中的子集,子集的范围从0个到文档到整个集合。find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定的查询条件。
849 0