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

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

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

    posts - 495,  comments - 11,  trackbacks - 0

    查詢緩存

    ?????? 查詢緩存是專門針對各種查詢操作進行緩存。查詢緩存會在整個SessionFactory的生命周期中起作用,存儲的方式也是采用key-value的形式來進行存儲的。

    ?????? 查詢緩存中的key是根據(jù)查詢的語句、查詢的條件、查詢的參數(shù)和查詢的頁數(shù)等信息組成的。而數(shù)據(jù)的存儲則會使用兩種方式,使用SELECT語句只查詢實體對象的某些列或者某些實體對象列的組合時,會直接緩存整個結(jié)果集。而對于查詢結(jié)果為某個實體對象集合的情況則只會緩存實體對象的ID值,以達到緩存空間可以共用,節(jié)省空間的目的。

    ?????? 在使用查詢緩存時,除了需要設(shè)置hibernate.cache.provider_class參數(shù)來啟動二級緩存外,還需要通過hibernate.cache.use_query_cache參數(shù)來啟動對查詢緩存的支持。

    ?????? 另外需要注意的是,查詢緩存是在執(zhí)行查詢語句的時候指定緩存的方式以及是否需要對查詢的結(jié)果進行緩存。

    ?????? 下面就來了解一下查詢緩存的使用方法及作用。

    ?????? 修改Hibernate配置文件

    ?????? 首先需要修改Hibernate的配置文件,增加hibernate.cache.use_query_cache參數(shù)的配置。配置方法如下:

    ?????? <property name="hibernate.cache.use_query_cache">true</property>

    ?????? Hibernate配置文件的詳細內(nèi)容請參考配套光盤中的hibernate\src\cn\hxex\ hibernate\cache\hibernate.cfg.xml文件。

    ?????? 編寫主測試程序

    ?????? 由于這是在前面二級緩存例子的基礎(chǔ)上來開發(fā)的,所以,對于EHCache的配置以及視圖對象的開發(fā)和映射文件的配置工作就都不需要再重新進行了。下面就來看一下主測試程序的實現(xiàn)方法,如清單14.11所示。

    ?????? 清單14.11??? 主程序的實現(xiàn)

    ……

    ??? public void run() {

    ??? ?????? SessionFactory sf = QueryCacheMain.getSessionFactory();

    ??? ?????? Session session = sf.getCurrentSession();

    ??? ?????? session.beginTransaction();

    ??? ?????? Query query = session.createQuery( "from User" );

    ??? ?????? Iterator it = query.setCacheable( true ).list().iterator();

    ??? ?????? while( it.hasNext() ) {

    ??? ????????????? System.out.println( it.next() );

    ??? ?????? }

    ??? ?????? User user = (User)session.get( User.class, "1" );

    ??? ?????? System.out.println( user );

    ??? ?????? session.getTransaction().commit();

    ??? }

    ?????? public static void main(String[] args) {

    ????????????? QueryCacheMain main1 = new QueryCacheMain();

    ????????????? main1.start();

    ????????????? try {

    ???????????????????? Thread.sleep( 2000 );

    ????????????? } catch (InterruptedException e) {

    ???????????????????? e.printStackTrace();

    ????????????? }

    ????????????? QueryCacheMain main2 = new QueryCacheMain();

    ????????????? main2.start();

    ?????? }

    }

    ?????? 主程序在實現(xiàn)的時候采用了多線程的方式來運行。首先將“from User”查詢結(jié)果進行緩存,然后再通過ID取得對象來檢查是否對對象進行了緩存。另外,多個線程的執(zhí)行可以看出對于進行了緩存的查詢是不會執(zhí)行第二次的。

    ?????? 運行測試主程序

    ?????? 接著就來運行測試主程序,其輸出結(jié)果應(yīng)該如下所示:

    Hibernate: select user0_.userId as userId0_, user0_.name as name0_, user0_.age as age0_ from USERINFO user0_

    ID: 1

    Namge:?? galaxy

    Age:?????? 32

    ID: 1

    Namge:?? galaxy

    Age:?????? 32

    ID: 1

    Namge:?? galaxy

    Age:?????? 32

    ID: 1

    Namge:?? galaxy

    Age:?????? 32

    ?????? 通過上面的執(zhí)行結(jié)果可以看到,在兩個線程執(zhí)行中,只執(zhí)行了一個SQL查詢語句。這是因為根據(jù)ID所要獲取的對象在前面的查詢中已經(jīng)得到了,并進行了緩存,所以沒有再次執(zhí)行查詢語句。

    posted on 2009-07-19 21:25 jadmin 閱讀(65) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品爱啪在线线免费观看| a毛片久久免费观看| 黄在线观看www免费看| 亚洲视频在线观看一区| 无码少妇精品一区二区免费动态| 久久精品国产亚洲综合色| 成人国产精品免费视频| 亚洲欧洲日产国码av系列天堂 | 亚洲中文字幕AV每天更新| 国产片AV片永久免费观看| 亚洲三级高清免费| 在线精品免费视频无码的| 国内成人精品亚洲日本语音| 免费在线观看视频a| 一级一级一级毛片免费毛片| 亚洲中文字幕无码久久精品1| 国产精品免费无遮挡无码永久视频 | 99ee6热久久免费精品6| 91亚洲精品自在在线观看| 永久免费的网站在线观看| 亚洲爆乳大丰满无码专区| 免费在线观看污网站| a毛片免费全部播放完整成| 亚洲成aⅴ人片在线影院八| 在线播放免费播放av片| 无码的免费不卡毛片视频| 亚洲国产一成人久久精品| 67194国产精品免费观看| 亚洲一区二区三区成人网站 | 中文字幕免费观看| 亚洲爆乳精品无码一区二区| 亚洲熟妇av一区二区三区 | 免费毛片a在线观看67194| 亚洲成在人线在线播放无码| 综合亚洲伊人午夜网 | 亚洲欧洲日产国码高潮αv| 久久免费视频99| 亚洲精品无码av片| 久久精品国产96精品亚洲| 午夜一级免费视频| 久久精品视频免费看|