Criteria接口

注:在新版本的hibernate中, Expression关键字已经改为Restrictions关键字

Criteria接口用处最多的地方为Expression.in(), 这个比HQL和session.createSQLQuery都要好用。此接口的其他查询表达式就不怎么常用了,还是HQL和session.createSQLQuery用的方便。格式为:

Expression.in(String propertyName, Collection values)

Expression.in(String propertyName, Object[] values)

两个小例子:

  1. Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } )
  2. Set<Integer> conds = new TreeSet<Integer>();
  3. conds.add(new Integer(1));
  4. conds.add(new Integer(2));
  5. criteria.add(Expression.in("id", conds));

Criteria Query: 可以看作传统sql的对象化表示

Criteria本身只是一个查询容器,具体的查询条件需要通过Criteria.add()方法添加到Criteria实例中。而Expression对象则描述了这些查询条件。

针对SQL语法,Expression提供了对应的查询限定机制。

Criteria由session创建

Criteria criteria = session.createCriteria(TestCase.class); //参数为被操作的pojo类, 反射机制.

Criteria中可以增加查询条件

criteria.add(Expression.eq("uid", "forrest"));

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

Criteria查询表达式

Expression.eq(对象属性名, 对象属性值) --> 对应SQL "field=value" 表达式

Expression.allEq(Map map) --> 参数为Map对象,其中包含了多个"key-value"关系,相当于多个Expression.eq()的叠加

Expression.gt(对象属性名, 对象属性值) --> 对应SQL "field>value" 表达式

Expression.ge(对象属性名, 对象属性值) --> 对应SQL "field>=value" 表达式

Expression.lt(对象属性名, 对象属性值) --> 对应SQL "field<value" 表达式

Expression.le(对象属性名, 对象属性值) --> 对应SQL "field<=value" 表达式

Expression.betweeen("age", new Integer(15), new Integer(25)) --> 对应SQL "between" 表达式

Expression.like("uid", "%forr%") --> 对应SQL "field like value" 表达式

Expression.in() --> 对应SQL "field in" 表达式

Expression.eqProperty() --> 比较两个属性之间的值。对应SQL "field=field" 表达式。Expression.eqProperty("User.groupId", "group.id");

Expression.geProperty() --> 比较两个属性之间的值。对应SQL "field>field" 表达式

Expression.gtProperty() --> 比较两个属性之间的值。对应SQL "field>=field" 表达式

Expression.ltProperty() --> 比较两个属性之间的值。对应SQL "field<field" 表达式

Expression.leProperty() --> 比较两个属性之间的值。对应SQL "field<=field" 表达式

Expression.and --> and关系组合。Expression.and(Expression.eq("uid", "forrest"), Expression.eq.("password", "abc"));

补充:Criteria接口也可通过使用多个Criteria.add(Expression)方法实现Criteria.add(Expression.and())

Expression.or --> or关系组合

Expression.sql --> 作为Expression对象的补充,本方法提供对原生sql的支持

Example类实现了Criterion接口,它也可以用作Criteria的查询条件:根据已有对象查询属性与之相符的其他对象。

当查询条件比较多的时候,可以用Example查询来简化代码(用Example是精确匹配).例如:

testCase.setTid("tc01");

testCase.setEntered_by("forrest");

criteria.add(Example.create(testCase));

复合查询
Criteria查询可以嵌套Criteria来实现复合查询
如下:
Criteria ct=session.createCriteria(TUser.class);
Criteria ctAddress=ct.createCriteria("addresses");//这里是嵌套了一个Criteria查询,这里的addresses是TUser的属性
ctAddress.add(Expression.like("address","%shanghai%"));
List list=ct.list();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值