中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Hibernate中DetachedCriteria如何使用

這篇文章將為大家詳細(xì)講解有關(guān)Hibernate中DetachedCriteria如何使用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),網(wǎng)站設(shè)計(jì),成都網(wǎng)站托管等一站式綜合服務(wù)型公司,專(zhuān)業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出創(chuàng)新互聯(lián)。

Hibernate DetachedCriteria,這是一個(gè)非常有意義的特性!我們知道,在常規(guī)的Web編程中,有大量的動(dòng)態(tài)條件查詢(xún),即用戶(hù)在網(wǎng)頁(yè)上面自由選擇某些條件,程序根據(jù)用戶(hù)的選擇條件,動(dòng)態(tài)生成SQL語(yǔ)句,進(jìn)行查詢(xún)。

針對(duì)這種需求,對(duì)于分層應(yīng)用程序來(lái)說(shuō),Web層需要傳遞一個(gè)查詢(xún)的條件列表給業(yè)務(wù)層對(duì)象,業(yè)務(wù)層對(duì)象獲得這個(gè)條件列表之后,然后依次取出條件,構(gòu)造查詢(xún)語(yǔ)句。這里的一個(gè)難點(diǎn)是條件列表用什么來(lái)構(gòu)造?傳統(tǒng)上使用Map,但是這種方式缺陷很大,Map可以傳遞的信息非常有限,只能傳遞name和value,無(wú)法傳遞究竟要做怎樣的條件運(yùn)算,究竟是大于,小于,like,還是其它的什么,業(yè)務(wù)層對(duì)象必須確切掌握每條entry的隱含條件。因此一旦隱含條件改變,業(yè)務(wù)層對(duì)象的查詢(xún)構(gòu)造算法必須相應(yīng)修改,但是這種查詢(xún)條件的改變是隱式約定的,而不是程序代碼約束的,因此非常容易出錯(cuò)。

DetachedCriteria可以解決這個(gè)問(wèn)題,即在web層,程序員使用DetachedCriteria來(lái)構(gòu)造查詢(xún)條件,然后將這個(gè)DetachedCriteria作為方法調(diào)用參數(shù)傳遞給業(yè)務(wù)層對(duì)象。而業(yè)務(wù)層對(duì)象獲得DetachedCriteria之后,可以在session范圍內(nèi)直接構(gòu)造Criteria,進(jìn)行查詢(xún)。就此,查詢(xún)語(yǔ)句的構(gòu)造完全被搬離到web層實(shí)現(xiàn),而業(yè)務(wù)層則只負(fù)責(zé)完成持久化和查詢(xún)的封裝即可,與查詢(xún)條件構(gòu)造完全解耦,非常***!這恐怕也是以前很多企圖在web層代碼中構(gòu)造HQL語(yǔ)句的人想實(shí)現(xiàn)的夢(mèng)想吧!

示例代碼片段如下:

  1. DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class);  

  2. detachedCriteria.add(Restrictions.eq("name", "department")).
    createAlias("employees", "e").add(Restrictions.gt(("e.age"), new Integer(20))); 

Department和Employee是一對(duì)多關(guān)聯(lián),查詢(xún)條件為:名稱(chēng)是“department”開(kāi)發(fā)部門(mén);部門(mén)里面的雇員年齡大于20歲;

業(yè)務(wù)層對(duì)象使用該條件執(zhí)行查詢(xún):

detachedCriteria.getExecutableCriteria(session).list();

***的意義在于,業(yè)務(wù)層代碼是固定不變的,所有查詢(xún)條件的構(gòu)造都在web層完成,業(yè)務(wù)層只負(fù)責(zé)在session內(nèi)執(zhí)行之。這樣代碼就可放之四海而皆準(zhǔn),都無(wú)須修改了。然而Spring和Hibernate DetachedCriteria有不兼容的問(wèn)題,因此在Spring環(huán)境下面使用Hibernate3需要注意:

Spring的HibernateTemplate提供了Hibernate的***封裝,即通過(guò)匿名類(lèi)實(shí)現(xiàn)回調(diào),來(lái)保證Session的自動(dòng)資源管理和事務(wù)的管理。其中核心方法是:

HibernateTemplate.execute(new HibernateCallback() {  public Object doInHibernate(Session session) throws HibernateException {  ....  }  }

回調(diào)方法提供了session作為參數(shù),有了session,就可以自由的使用Hibernate API編程了。使用了spring的之后,代碼修改如下:

  1. DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class);  

  2. detachedCriteria.createAlias("employees", "e").
    add(Restrictions.eq("name", "department")).
    add(Restrictions.gt(("e.age"), new Integer(20)));  

  3. departmentManager.findByCriteria(detachedCriteria); 

關(guān)于Hibernate中DetachedCriteria如何使用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站欄目:Hibernate中DetachedCriteria如何使用
標(biāo)題URL:http://www.rwnh.cn/article20/gpocjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈定制開(kāi)發(fā)、做網(wǎng)站靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
建德市| 嘉荫县| 吴忠市| 勃利县| 惠来县| 武鸣县| 黔江区| 景东| 文登市| 麻江县| 时尚| 青田县| 深圳市| 林口县| 龙海市| 贵德县| 维西| 潢川县| 江都市| 兴海县| 东城区| 甘洛县| 台江县| 林州市| 康平县| 万州区| 嵊泗县| 富民县| 文安县| 芮城县| 宜丰县| 奉化市| 东兰县| 佛教| 河池市| 连州市| 蛟河市| 兴安县| 筠连县| 达孜县| 长海县|