zoukankan      html  css  js  c++  java
  • DetachedCriteria详细使用

    一、基本使用

    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 的完整用法

  • 相关阅读:
    前端iframe跨域传值笔记
    css 将第1/n行文本超出部分替换成省略号
    第一章:1-08、计算机网络中的主干网和本地接入网各有何特点?
    第一章:1-07、 计算机网络可从哪几个方面进行分类?
    第一章:1-06、 试将TCP/IP和OSI的体系结构进行比较。讨论其异同之处?
    第一章:1-05、试讨论在广播式网络中对网络层的处理方法。讨论是否需要这一层?
    第一章:1-04、为什么说因特网是自由印刷术以来人类通信方面最大的变革?
    第一章:1-03、试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。
    第一章:1-02、试简述分组交换的要点。
    第一章:1-01、计算机网络的发展可划分为几个阶段?每个阶段各有何特点?
  • 原文地址:https://www.cnblogs.com/langtianya/p/4704886.html
Copyright © 2011-2022 走看看