一、基本使用

1. 说明

Restrictions 是产生查询条件的工具类。

2. 定义

可以直接用class 创建

DetachedCriteria searDc =

DetachedCriteria.forClass(QymlPerson.class);

也可以用hibernate 的session 创建

session.createCriteria(Student.class)

3. 条件查询

3.1 多条件的and 规则

通过searDc.add(Restrictions.eq("unid", userid))实现条件查询。

多次添加的条件,默认的规则是and.

3.2 多条件的or 规则

如果实现or 的查询,需要按照如下方式进行

searDc.add(Restrictions.or(Restrictions.eq("deptunid", "aa"),

Restrictions.isNull("deptunid")));

其中isnull 表示一个常规字段是否为空,isEmpty 用来表示一个集合字段是否为空。

4. 查询排序

通过searDc.addOrder(Order.asc(propertyName1))可以添加排序,如果有多个排

序字段,可以添加多次;最终的结果将按照添加的次序进行排序处理。

二、子查询

//主查询:人员查询

DetachedCriteria searDc =

DetachedCriteria.forClass(QymlPerson.class);

//子查询:职务人员关系表

DetachedCriteria sub =

DetachedCriteria.forClass(QymlPositionUserLink.class);

sub.add(Restrictions.eq("positionunid", positionunid));

//子查询:指定查询的列(也就是select usernuid from ....)

sub.setProjection(Property.forName("userunid"));

//主查询和子查询关联(也就是where unid in (select userunid from...) )

searDc.add(Property.forName("unid").in(sub));

在上面的例子中,用个一个类似于下面SQL 的子查询

Select * from Person a where a.unid in (select userunid from PositionUserLink b where

b.positionunid = ..)

Property 还有其他的条件判断,参考api

http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/criter

ion/Property.html。

三、Restrictions表达式

HQL运算符 QBC运算符 含义

= Restrictions.eq() 等于equal

<> Restrictions.ne() 不等于 not equal

> Restrictions.gt() 大于greater than

>= Restrictions.ge() 大于等于 greater than or

equal

< Restrictions.lt() 小于less than

<= Restrictions.le() 小 于 等 于 less than or

equal

is null Restrictions.isnull() 等于空值

is not null Restrictions.isNotNull() 非空值

like Restrictions.like() 字符串模式匹配

and Restrictions.and() 逻辑与

and Restrictions.conjunction() 逻辑与

or Restrictions.or() 逻辑或

or Restrictions.disjunction() 逻辑或

not Restrictions.not() 逻辑非

in(列表) Restrictions.in() 等于列表中的某一个值

not in(列表) Restrictions.not(Restrictions.in()) 不等于列表中任意一个值

between x and y Restrictions.between() 闭区间 xy中的任意值

not between x and y

Restrictions.not(Restrictions..between()) 小于值X 或者大于值y

三、Restrictions关联查询

如果每个美女都有自己的客户资源(不要想歪了!),那么需要查询拥有客户Gates的美女怎么办?

使用Criteria可以有两种方法:

1:
DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class).createCriteria("customers");
beautyCriteria.add(Restrictions.eq("name", "Gates")):

2:
DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class).createAlias("customers", "c");
beautyCriteria.add(Restrictions.eq("c.name", "Gates")):

接着有了新的要求,年纪太大的美女不要,还是查找拥有客户Gates的,条件如下:
DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class, "b").;
DetachedCriteria customerCriteria = beautyCriteria.createAlias("customers", c");
beautyCriteria.add(Restrictions.le("b.age", new Long(20))):
customerCriteria.add(Restrictions.eq("c.name", "Gates")):

相关:

Hibernate - DetachedCriteria 的完整用法

DetachedCriteria详细使用的更多相关文章

  1. Criteria 和 DetachedCriteria的区别与使用

    Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的:而 DetachedC ...

  2. Hibernate3的DetachedCriteria支持

    Hibernate3支持DetachedCriteria,这是一个非常有意义的特性!我们知道,在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态 ...

  3. Criteria 和 DetachedCriteria的区别与使用(转)

    转自:http://javapub.iteye.com/blog/1149709 Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的, ...

  4. Hibernate的DetachedCriteria使用(含Criteria)

    1.背景了解:Hibernate的三种查询方式 Hibernate总的来说共有三种查询方式:HQL.QBC和SQL三种,这里做简单的概念介绍,不详细进行展开. 1.1 HQL(Hibernate Qu ...

  5. DetachedCriteria用法

    http://uule.iteye.com/blog/947923转载 在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查 ...

  6. Hibernate - DetachedCriteria 的完整用法(转)

    现在对 Hibernate的Criteria 的用法进行总结:     Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Crite ...

  7. 转:Hibernate中Criteria和DetachedCriteria的完整用法

    原文地址:http://blog.sina.com.cn/s/blog_667528fd0100rkrf.html 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 H ...

  8. Hibernate的DetachedCriteria使用(含Criteria)转载

    https://www.cnblogs.com/deng-cc/p/6428599.html 1.背景了解:Hibernate的三种查询方式 Hibernate总的来说共有三种查询方式:HQL.QBC ...

  9. java170道面试题汇总+详细解析

    2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...

随机推荐

  1. python数字图像处理(3):图像像素的访问与裁剪

    图片读入程序中后,是以numpy数组存在的.因此对numpy数组的一切功能,对图片也适用.对数组元素的访问,实际上就是对图片像素点的访问. 彩色图片访问方式为: img[i,j,c] i表示图片的行数 ...

  2. Activiti系列: 如何给内置表单添加字段类型

     对于内置的表单,除了原来支持的几种数据类型(string, long, enum, date, boolean, collection)之外,还可以自定义数据类型,比如增加一个javascript数 ...

  3. 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    1.添加M2_HOME的环境变量 2.Preference->Java->Installed JREs->Edit 选择一个jdk, 添加  -Dmaven.multiModuleP ...

  4. Solr(5.1.0) 与Tomcat 从0开始安装与配置

    1.什么是Solr? Solr是一个基于Lucene的Java搜索引擎服务器.Solr 提供了层面搜索.命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式).它易于安装和配置 ...

  5. 数据挖掘系列(5)使用mahout做海量数据关联规则挖掘

    上一篇介绍了用开源数据挖掘软件weka做关联规则挖掘,weka方便实用,但不能处理大数据集,因为内存放不下,给它再多的时间也是无用,因此需要进行分布式计算,mahout是一个基于hadoop的分布式数 ...

  6. node的实践(项目二)

    找以前看看简单的demo,看看node是怎么操作Mongo然后又是渲染前台的,与前面的项目一中的对比. 1.操作Mongo数据库的方法和方式. var mongodb = require('./db' ...

  7. 工作的思考十七:工作中容易犯的错误 - Delay

    其实IT是一个很严谨的行业,不管是从代码角度还是从日常的工作分配都是按计划来的. 从今年年初到现在,在我的工作中出现了两次“Delay”,第一次不以为然,虽然上司也找过我谈话,但没意识到问题的严重性. ...

  8. JavaScript基础---Cookie

    内容提纲: 1.cookie 2.cookie局限性 3.其他存储 发文不易,转载请注明出处链接,谢谢! 随着Web越来越复杂,开发者急切的需要能够本地化存储的脚本功能.这个时候,第一个出现的方案:c ...

  9. PHP中的日期加减方法示例

    几乎所有从事程序开发的程序员都遇到时间处理问题,PHP开发也一样,幸运的是PHP提供了很多关于日期时间函数.只要经常使用这些函数,搭配使用,日期时间处理上就熟能生巧了. 今天要讲的这个例子,需求是这样 ...

  10. Oracle 索引

    索引是建立在数据库表中的某些列的上面,是与表关联的,可提供快速访问数据方式,但会影响增删改的效率:常用类型(按逻辑分类):单列索引和组合索引.唯一索引和非唯一索引. 什么时候要创建索引 (1)在经常需 ...