<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jason ---分享,共同進(jìn)步

    激情成就夢(mèng)想,努力創(chuàng)造未來(lái)
    隨筆 - 53, 文章 - 1, 評(píng)論 - 45, 引用 - 0
    數(shù)據(jù)加載中……

    hibernate查詢(1)

    相信越來(lái)越多的web開(kāi)發(fā)者,在持久層都采用了hibernate。hibernate 可以大大提高開(kāi)發(fā)效率,同時(shí)對(duì)應(yīng)項(xiàng)目的移植也有好處,但是同樣也存在問(wèn)題,大家在使用hibernate的時(shí)候很少去關(guān)心效率問(wèn)題,但是這個(gè)就是一個(gè)打的問(wèn)題,好多項(xiàng)目不成功就是項(xiàng)目中沒(méi)有對(duì)hibernate熟悉的人,大家就是會(huì)簡(jiǎn)單的使用,所以再有些細(xì)節(jié)上的東西我們開(kāi)發(fā)人員沒(méi)有注意。

     

       就拿hibernate來(lái)說(shuō)吧,他支持hql查詢,在我們組裝sql語(yǔ)句時(shí),需要注意幾個(gè)問(wèn)題:
       1、要查詢當(dāng)然離不開(kāi)數(shù)據(jù)庫(kù),我們建表時(shí),默認(rèn)的主鍵都是索引,這里要注意的就是關(guān)于建立單個(gè)索引和復(fù)合索引了。

          具體的索引的hibernate中也是適用,我發(fā)現(xiàn)好多人用hibernate就很少提到索引這個(gè)概念了(用ibatis自己寫sql就會(huì)關(guān)注索引字段,這個(gè)還是可以的額)

          索引的引用規(guī)則都是適用的:
          介紹下:?jiǎn)蝹€(gè)索引就是出現(xiàn)索引字段作為條件就應(yīng)用 ;
                  復(fù)合索引(假設(shè)是2個(gè)字段的復(fù)合索引),出現(xiàn)復(fù)合索引的第一個(gè)字段作為條件就應(yīng)用;
                  出現(xiàn)復(fù)合索引的2個(gè)字段作為條件,這應(yīng)用,如果沒(méi)有出現(xiàn)復(fù)合索引的第一個(gè)字段則不應(yīng)用;
          由此我們需要為我們的數(shù)據(jù)庫(kù)建立索引,記住復(fù)合索引是有順序的 。
         
          影響我們建立索引的條件還有就是業(yè)務(wù)(這個(gè)很重要) ,舉個(gè)例子:如果有2個(gè)查詢條件(性別、所在部門),倘若我們要建立符合索引,
          那么我們應(yīng)該將"所在部門"字段放在前面,"性別"放在后面,主要是因?yàn)椋绻硞€(gè)地方的查詢條件只有"所在部門",也可以起作用。另外要注意,如果查詢索引字段參與函數(shù)計(jì)算和like等,那么索引也不起作用。
      2、 在我們寫查詢代碼時(shí),盡量對(duì)應(yīng)各個(gè)表的已經(jīng)存在索引寫查詢條件
          [第一個(gè)查詢條件盡量是單個(gè)索引,或者是復(fù)合索引的第一個(gè)字段]  。
      3、還有就是大家再拼裝查詢語(yǔ)句時(shí),傳入的查詢條件值盡量不要直接寫在查詢語(yǔ)句中,而是要以參數(shù)的方式提供即使用綁定參數(shù)
         這樣,系統(tǒng)多次調(diào)用統(tǒng)一個(gè)查詢時(shí)(比如:select * from TestVO where code = ?   [不要寫為  select * from TestVO where code = 'aaaa']) ,
         條件值都是以參數(shù)的方式提供的,這樣,多次查詢雖然參數(shù)值不一樣,但查詢語(yǔ)句相同,數(shù)據(jù)庫(kù)只有第一次才對(duì)查詢語(yǔ)句進(jìn)行編譯,
         以后則不在編譯,所以性能會(huì)有提升。
         用參數(shù)的方式還有一個(gè)好處是:如果你不是使用
         Criteria criteria = openSession().createCriteria(**PO.class);
         criteria.add(Restrictions.like( "name",convertDBString(name) ));
         的方式,而是使用hibernate的hql的話,那么如果參數(shù)值為中文會(huì)有問(wèn)題,用參數(shù)可以解決這個(gè)問(wèn)題。

    注: 使用綁定參數(shù)的優(yōu)勢(shì):
      我們?yōu)槭裁匆褂媒壎麉?shù)?任何一個(gè)事物的存在都是有其價(jià)

    值的,具體到綁定參數(shù)對(duì)于HQL查詢來(lái)說(shuō),主要有以下兩個(gè)主要優(yōu)勢(shì):
      ①、 可以利用數(shù)據(jù)庫(kù)實(shí)施性能優(yōu)化,因?yàn)閷?duì)Hibernate來(lái)說(shuō)在底層

    使用的是PrepareStatement來(lái)完成查詢,因此對(duì)于語(yǔ)法相同參數(shù)不同的

    SQL語(yǔ)句,可以充分利用預(yù)編譯SQL語(yǔ)句緩存,從而提升查詢效率。
      ②、 可以防止SQL Injection安全漏洞的產(chǎn)生:

    posted on 2010-02-24 16:56 agun 閱讀(494) 評(píng)論(0)  編輯  收藏 所屬分類: java web

    主站蜘蛛池模板: 二个人看的www免费视频| 亚洲一欧洲中文字幕在线| 国产成人亚洲精品无码AV大片| 4444www免费看| 亚洲视频在线观看网站| 国产午夜成人免费看片无遮挡| 亚洲日韩精品一区二区三区 | 日韩精品成人亚洲专区| 男女猛烈xx00免费视频试看| 精品无码国产污污污免费| 亚洲av日韩专区在线观看| 国产一级淫片免费播放| 猫咪免费人成在线网站| 中文字幕亚洲第一| 久久成人a毛片免费观看网站| 亚洲午夜免费视频| 无限动漫网在线观看免费| 亚洲熟妇无码AV不卡在线播放| 国产在线98福利播放视频免费| 特黄aa级毛片免费视频播放| 亚洲午夜久久久久久久久久 | 久久精品国产亚洲av品善| 免费大香伊蕉在人线国产| 一级特黄色毛片免费看| 久久91亚洲人成电影网站| 最近中文字幕大全免费视频| 久久亚洲最大成人网4438| 全部免费国产潢色一级| 在线观看免费视频网站色| 亚洲国产精品综合福利专区| 国产精品视_精品国产免费| 男女一边摸一边做爽的免费视频 | 理论片在线观看免费| 久久久久久久久亚洲| 毛片a级三毛片免费播放| 国产精品免费久久久久电影网| 亚洲午夜精品一区二区| 在线a亚洲v天堂网2018| 久久精品国产大片免费观看| 一本色道久久88—综合亚洲精品| 亚洲日本在线观看视频|