免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
DetachedCriteria類詳解——hibernate

首先看DetachedCriteria這個(gè)類名,是由兩個(gè)單詞(detached和criteria)組成的,Criteria咱們知道是QBC查詢主要接口之一,它通過(guò)組裝各種Criterion對(duì)象來(lái)獲取實(shí)體,Hibernate中的Session是產(chǎn)生Criteria的工廠,Criterion實(shí)例一般來(lái)說(shuō)都是通過(guò)Restrictions類獲取的,如下面這個(gè)例子:

List cats = session.createCriteria(Cat.class)

    .add( Restrictions.like("name", "Iz%") )

    .add( Restrictions.gt( "weight", new Float(minWeight) ) )

    .addOrder( Order.asc("age") )

    .list();

通過(guò)上述例子可以發(fā)現(xiàn)需要使用Session實(shí)例來(lái)獲取Criteria對(duì)象,再看另外一個(gè)單詞detached,意思為“分離的、分開(kāi)的、分割的、未綁定依附的”意思,那到底跟誰(shuí)分離、分開(kāi)呢?對(duì),就是session,也就是說(shuō)兩個(gè)單詞合起來(lái)的意思是該類除了創(chuàng)建時(shí)不在依附于任何Session,但可以完整支持Criteria的功能,這就是DetachedCriteria的誕生的根本需求;

下面咱們?cè)賮?lái)討論下該類的應(yīng)用場(chǎng)景:

在常規(guī)的Web編程中,有大量的動(dòng)態(tài)條件查詢,即用戶在網(wǎng)頁(yè)上面根據(jù)自身需要選擇錄入某些條件,程序根據(jù)用戶選擇內(nèi)容,動(dòng)態(tài)生成查詢SQL語(yǔ)句,進(jìn)行查詢。

  針對(duì)這種需求,對(duì)于分層應(yīng)用程序來(lái)說(shuō),Web層需要傳遞一個(gè)包含了查詢的條件條件的列表給業(yè)務(wù)層對(duì)象(傳統(tǒng)上使用Map對(duì)象),業(yè)務(wù)層對(duì)象獲得這個(gè)條件列表之后,依次從列表取出條件,構(gòu)造查詢語(yǔ)句。這里的一個(gè)難點(diǎn)是條件列表用什么來(lái)構(gòu)造?那么這么做的缺陷就是Map對(duì)象可以傳遞的信息非常有限,只能傳遞name和value,無(wú)法傳遞究竟要做怎樣的條件運(yùn)算,即這么name和value之間什么關(guān)系,是>,<,IN,AND,OR呢?這就要求業(yè)務(wù)層對(duì)象必須確切掌握每條entry的隱含條件。因此一旦隱含條件改變,業(yè)務(wù)層對(duì)象的查詢構(gòu)造算法必須相應(yīng)修改,但是這種查詢條件的改變是隱式約定的,而不是程序代碼約束的,因此非常容易出錯(cuò)。DetachedCriteria的出現(xiàn)解決了上述問(wèn)題;

下面介紹一下DetachedCriteria的日常使用;

1、DetachedCriteria類允許你在Hibernate的Session范圍外創(chuàng)建一個(gè)查詢,然后使用任意一個(gè)Session環(huán)境去執(zhí)行它,這種用法也是使用最多的用法,該類提供了如下兩個(gè)方法用以構(gòu)建DetachedCriteria對(duì)象


代碼如下:

// 創(chuàng)建DetachedCriteria對(duì)象

DetachedCriteria query = DetachedCriteria.forClass(Cat.class).add( Property.forName("sex").eq('F') );

// 獲取Session對(duì)象

Session session = ....;

// 開(kāi)啟事務(wù)

Transaction txn = session.beginTransaction();

// 將DetachedCriteria查詢對(duì)象與可執(zhí)行的Criteria實(shí)例關(guān)聯(lián)起來(lái)

List results = query.getExecutableCriteria(session).setMaxResults(100).list();

// 提交事務(wù)

txn.commit();

// 關(guān)閉Session,釋放資源

session.close();

2、一個(gè)DetachedCriteria可用作子查詢,Criterion實(shí)例可以通過(guò)Subqueries和Property類調(diào)用DetachedCriteria構(gòu)建的子查詢,如下代碼所示:

// 構(gòu)建所有Cat中的平均體重

DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)

    .setProjection(Property.forName("weight").avg());

// 獲取所有Cat中,高于平均提供的Cat的集合

session.createCriteria(Cat.class).add(Property.forName("weight").gt(avgWeight))

    .list();

// 構(gòu)建所有Cat的提供集合列表

DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)

    .setProjection(Property.forName("weight"));

// 獲取所有Cat中,體重最大的Cat

session.createCriteria(Cat.class).add(Subqueries.geAll("weight", weights))

    .list();

}

關(guān)聯(lián)子查詢,即DetachedCriteria構(gòu)建的子查詢和Criteria構(gòu)建的查詢也可以直接交互,如下:

DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, "cat2")

.setProjection(Property.forName("weight").avg()).add(Property.forName("cat2.sex").eqProperty(

"cat.sex"));

session.createCriteria(Cat.class,"cat").add(Property.forName("weight").gt(avgWeightForSex)).list();

最后在上一個(gè)當(dāng)用DetachedCriteria構(gòu)建的投影,有多個(gè)列的例子:

DetachedCriteria sizeQuery = DetachedCriteria

.forClass(SlEmployee.class).setProjection(Projections.projectionList()

.add(Projections.property("userName"))

.add(Projections.property("employeeName")))

.add(Restrictions.eq("userName", "CHENGYU"));

List list = session.createCriteria(SlEmployee.class)

.add(Subqueries.propertiesEq(new String[] { "userName", "employeeName" }, sizeQuery)).list();

實(shí)際項(xiàng)目中用的最多的是第一種用法,即用來(lái)構(gòu)建一個(gè)查詢對(duì)象,對(duì)于子查詢這種用法則用的較少,通過(guò)例子可以看出,子查詢的功能似乎才更能體現(xiàn)出DetachedCriteria的強(qiáng)大!!


轉(zhuǎn)自:https://blog.csdn.net/yu102655/article/details/52469180 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
hibernate Criteria 關(guān)聯(lián)查詢
Hibernate---Criteria 查詢
[轉(zhuǎn)] Hibernate3的DetachedCriteria支持 - 影尋 - 網(wǎng)易博客
Hibernate 復(fù)合查詢 - Winbomb - 網(wǎng)易博客
六種方式實(shí)現(xiàn)hibernate查詢,及IDE推薦
Hibernate 結(jié)果集排序
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服