Criteria特性

 QBC查询:
 QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动
态拼装,对查询提供了更加面向对象的功能接口。我们看下面的示例程序:
            Criteria criteria=session.createCriteria(User.class);
            criteria.add(Expression.eq(“name”,”zx”));
            criteria.add(Expression.eq(“age”,new Integer(27));
            List list=criteria.list();
            当执行criteria.list()时会生成类似这样的SQL语句:
Select * from user where name=’zx’ and age=27;所以在这里我们可以看出,Criteria实际上是一个
查询容器,它对查询条件表达式的添加进行了封装,具体的查询条件是通过add()方法添加的,而且具体的查
询条件的表达式运算是通过Expression指定的。Hibernate在运行期会根据Criteria指定的表达式条件来
添加查询条件,并且生成查询语句。这种方式非常符合Java以及所有面向对象编程语言的编程方式,所以大多
数的持久层框架都提供了对这种方式查询的支持。下面我们讲解这种查询方式的各个技术细节。
            1、Criteria查询表达式:
            正如我们所见,Expression对查询语句的表达式进行了封装和限制,下表列出了Expression
所有的方法,以及每个方法所对应的查询表达式及其限制。
            方法  描述
            Expression.eq   
            对应SQL的“field=value”表达式
            如:Expression.eq(“name”,”zx”);
            Expression.allEq    方法的参数为一个Map类型对象,包含多个名/值对对应关系,相当于
多个Expression.eq的叠加
            Expression.gt   对应SQL的“field>value”表达式
            Expression.ge   对应SQL的“field>=value”表达式
            Expression.lt   对应SQL的“fieldfield”SQL表达式
            Expression.geProperty   用于比较两个属性值,对应”field>=field”SQL表达式
            Expression.ltProperty   用于比较两个属性值,对应”field(select avg(age) from user group by age);
             

Hibernate除了处理查询结果集中的对象之外,
还可以将结果集中的结果当做行和列集来使用,
这与通过JDBC执行select查询获得的数据的使用方式相似。
因此,Hibernate也支持属性、统计函数和Group By等查询。

            要想使用Hibernate的投影统计功能,
首先要从org.hibernate.criterion.Projections工厂类获得org.hibernate.criterion.Projection对象。与Restrictions类相似,Projections类提供了几个用来获取Projection实例的静态工厂方法。
在获得Projection对象之后,
使用setProjection()方法将它添加到Criteria对象中。
注意,返回的结果集是Object类型,
需要对结果进行适当的类型转换。

你可能感兴趣的:(Criteria特性)