DetachedCriteria與Criteria的用方有哪些不同-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)DetachedCriteria與Criteria的用方有哪些不同,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元雁峰做網(wǎng)站,已為上家服務(wù),為雁峰各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

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

比如,我記得在Facebook中可以選擇高級(jí)查詢條件,這個(gè)就是個(gè)動(dòng)態(tài)的查詢了塞,我們無(wú)法預(yù)知使用多少個(gè)查詢,直接書(shū)寫(xiě)死了在我們的Dao層顯然是不服和我們的意思的塞

針對(duì)這種需求,對(duì)于分層應(yīng)用程序來(lái)說(shuō),Web層需要傳遞一個(gè)查詢的條件列表給業(yè)務(wù)層對(duì)象,業(yè)務(wù)層對(duì)象獲得這個(gè)條件列表之后,然后依次取出條件,構(gòu)造查詢語(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ì)象的查詢構(gòu)造算法必須相應(yīng)修改,但是這種查詢條件的改變是隱式約定的,而不是程序代碼約束的,因此非常容易出錯(cuò)。

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

Criteria 和 DetachedCriteria 的主要區(qū)別

在于創(chuàng)建的形式不一樣, Criteria 是在線的,所以它是由 Hibernate Session 進(jìn)行創(chuàng)建的,而 DetachedCriteria 是離線的,創(chuàng)建時(shí)無(wú)需Session .

DetachedCriteria的創(chuàng)建

DetachedCriteria 提供了 2 個(gè)靜態(tài)方法 ,進(jìn)行DetachedCriteria 實(shí)例的創(chuàng)建。
forClass(Class)
forEntityName(Name)

Spring 的框架提供了對(duì)于離線查詢的支持,非常的簡(jiǎn)單的使用那些方法

Spring 的框架提供了getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根據(jù)DetachedCriteria 來(lái)返回查詢結(jié)果。Criteria的子類就是 DetachedCriteria 我們可以簡(jiǎn)單的使用就好了。

使用到了這些我們就不得不說(shuō) Restrictions

是產(chǎn)生查詢條件的工具類。Restrictions表達(dá)式如下
HQL運(yùn)算符 QBC運(yùn)算符 含義
= 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() 等于列表中的某一個(gè)值 
not in(列表) Restrictions.not(Restrictions.in()) 不等于列表中任意一個(gè)值 
between x and y Restrictions.between() 閉區(qū)間 xy中的任意值 
not between x and y Restrictions.not(Restrictions..between()) 小于值X 或者大于值y

當(dāng)前名稱:DetachedCriteria與Criteria的用方有哪些不同-創(chuàng)新互聯(lián)
鏈接地址:http://muchs.cn/article18/cdcjgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)全網(wǎng)營(yíng)銷推廣、定制網(wǎng)站商城網(wǎng)站、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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)

成都app開(kāi)發(fā)公司