DetachedCriteria 使用手册

一、基本使用

1、说明:Restrictions 是产生查询条件的工具类

2、定义:可以直接用class创建:DetachedCriteria dc = DetachedCriteria.forClass(Person.class);

3、条件查询

     (1)多条件的and查询规则:

         dc.add(Restrictions.eq("uuid",userid));

         dc.add(Restrictions.eq("name",name));

多次添加,默认实现and多条件查询

    (2)多条件的or查询

         dc.add(Restrictions.or(Restrictions.eq("name",name),Restrictions.isNull("name"))); 

// isNull表示常规字段是否为空,isEmpty用来表示一个集合字段是否为空。

4、查询排序

      dc.addOrder(Order.asc("uuid"));   如果有多个排序字段,可以添加多次,最终结果按添加次序进行排序处理。

二、子查询

//主查询: DetachedCriteria dc = DetachedCriteria.forclass(Person.class);   //全部人员表

//子查询:DetachedCriteria subDc = DetachedCriteria.forclass(Student.class);  //学生表

subDc.add(Restrictions.eq("sex",'male'));  

subDc.setProjection(Property.forName(studentId)); //指定查询列 select studentId from ....

dc.add(Porperty.forName("unid").in(sub)) //主查询与子查询关联:where unid in (select studentId from ....)

上面的查询,相当于以下的sql查询:

           select * from Person p where p.unid in (select studentId from Student s where s.sex='male'); 

Property的其它条件判断,参考api: http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/criterion/Property.html

三、Restrictions 表达式

HQL运算符 QBC运算符 含义
= Restrictions.eq() 等于equal
<> Restrictions.ne()
不等于 not equal
> Restrictions.gt()
大于 
>= Restrictions.ge()
大于等于
< Restrictions.lt()
小于
<= Restrictions.le()
小于等于
is null Restrictions.isNull()
等于空值
is not null Restrictions.isNotNull()
非空值
like Restrictions.like()
字符串模式匹配
and Restrictions.add()
逻辑与
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()
闭区间x-y中的任意值
not between x and y                                    Restrictions.not( Restrictions.between())       小于x或者大于Y




你可能感兴趣的:(sql,api,Class,工具)