DetachedCriteria詳細使用

2021-10-23 03:47:32 字數 3834 閱讀 2884

一、基本使用

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));

//子查詢:指定查詢的列(也就是selectusernuid

from ....)

sub.setprojection(property.forname("userunid"));

//主查詢和子查詢關聯(也就是whereunid in (select userunid from...) )

seardc.add(property.forname("unid").in(sub));

在上面的例子中,用個乙個類似於下面sql的子查詢

select * from

person a where a.unid in (select userunid frompositionuserlink b where

b.positionunid= ..)

property

還有其他的條件判斷,參考api

ion/property.html。

三、restrictions表示式

hql運算子qbc運算子含義

=

restrictions.eq() 等於equal

<>

restrictions.ne() 不等於

not equal

>

restrictions.gt() 大於greaterthan

>=

restrictions.ge() 大於等於

greater than or

equal

<

restrictions.lt() 小於lessthan

<=

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 yrestrictions.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")):

簡單理解DetachedCriteria離線查詢

detachedcriteria翻譯為離線查詢,他是可以脫離session條件查詢的物件,大家都知道criteria查詢需要通過session才能查詢,而detachedcriteria離線查詢 可以在其他層進行封裝,這個比較有用的,在ssh整合的時候,在做一些特別複雜的查詢的時候 我們可以直接在w...

總結DetachedCriteria級聯查詢

b 如果實體物件中沒有關聯物件的情況 b 使用detachedcriteria進行查詢是一件很簡單的事情。假設要通過stuname查詢乙個學生student記錄,可以如下 detachedcriteria dc detachedcriteria.forclass student.class dc.a...

iOS開發筆記 TableView的詳細使用

每個section顯示的標題 nsstring tableview uitableview tableview titleforheaderinsection nsinteger section 指定有多少個分割槽 section 預設為1 nsinteger numberofsectionsint...