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

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

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

    hibernate查詢緩存


     

    hibernate查詢緩存(hibernate默認是關閉的)

     

    查詢緩存是針對普通屬性結果集的緩存

    對實體對象的結果集只緩存id

     

    查詢緩存的生命周期,當前關聯的表發生修改,那么查詢緩存生命周期結束

     

    查詢緩存的配置和使用:

    1. 啟用查詢緩存:在hibernate.cfg.xml中加入:

    <property name=”hibernate.cache.use_query_cache”>true</property>

      2. 在程序中必須手動啟用查詢緩存,如:query.setCacheable(true);

     

     

    測試查詢緩存:

    一.  開啟查詢緩存,關閉二級緩存,開啟一個session,分別調用query.list  (查詢屬性)

     

    Query query = session.createQuery(“select s.name from Student s”);

    //啟用查詢緩存

    query.setCacheable(true);

     

    List names = query.list();

    for(Iterator iter = names.terator();iter.hasNext();){

           String name = (String)iter.next();

           System.out.println(name);

    }

     

    System.out.println(“------------------------------------------”);

     

    query = session.createQuery(“select s.name from Student s”);

    //啟用查詢緩存

    query.setCacheable(true);

     

    names = query.list();

    for(Iterator iter = names.terator();iter.hasNext();){

           String name = (String)iter.next();

           System.out.println(name);

    }

    第二次沒有去查詢數據庫,因為啟用了查詢緩存

     

    二.  開啟查詢緩存,關閉二級緩存,開啟兩個session,分別調用query.list  (查詢屬性)

     

    Query query = session.createQuery(“select s.name from Student s”);

    //啟用查詢緩存

    query.setCacheable(true);

     

    List names = query.list();

    for(Iterator iter = names.terator();iter.hasNext();){

           String name = (String)iter.next();

           System.out.println(name);

    }

     

    session.close();

     

    System.out.println(“------------------------------------------”);

    ………

    Query query = session.createQuery(“select s.name from Student s”);

    //啟用查詢緩存

    query.setCacheable(true);

     

    List names = query.list();

    for(Iterator iter = names.terator();iter.hasNext();){

           String name = (String)iter.next();

           System.out.println(name);

    }

    第二次沒有去查詢數據庫,因為查詢緩存生命周期與session生命周期無關

     

    三.  開啟查詢緩存,關閉二級緩存,開啟兩個session,分別調用query.iterate (查詢屬性)

     

    Query query = session.createQuery(“select s.name from Student s”);

    //啟用查詢緩存

    query.setCacheable(true);

     

    for(Iterator iter =query.iterate();iter.hasNext();){

           String name = (String)iter.next();

           System.out.println(name);

    }

     

    session.close();

     

    System.out.println(“------------------------------------------”);

    ………

    Query query = session.createQuery(“select s.name from Student s”);

    //啟用查詢緩存

    query.setCacheable(true);

     

    for(Iterator iter = query.iterate();iter.hasNext();){

           String name = (String)iter.next();

           System.out.println(name);

    }

    第二去查詢數據庫,因為查詢緩存只對query.list()起作用,對query.iterate()不起作用,也就是說query.iterate()不使用查詢緩存

     

    四.  關閉查詢緩存,關閉二級緩存,開啟兩個session,分別調用query.list (查詢實體對象)

     

    Query query = session.createQuery(“ from Student s”);

    //query.setCacheable(true);

    List students = query.list();

    for(Iterator iter = students.iterate();iter.hasNext();){

           Student stu = (Student)iter.next();

           System.out.println(stu.getName());

    }

     

    session.close();

     

    System.out.println(“------------------------------------------”);

    ………

    Query query = session.createQuery(“ from Student s”);

    //query.setCacheable(true);

    List students = query.list();

    for(Iterator iter = students.iterate();iter.hasNext();){

           Student stu = (Student)iter.next();

           System.out.println(stu.getName());

    }

    第二去查詢數據庫,因為list默認每次都會發出查詢sql

     

    五.  開啟查詢緩存,關閉二級緩存,開啟兩個session,分別調用query.list (查詢實體對象)

     

    Query query = session.createQuery(“ from Student s”);

    query.setCacheable(true);

    List students = query.list();

    for(Iterator iter = students.iterate();iter.hasNext();){

           Student stu = (Student)iter.next();

           System.out.println(stu.getName());

    }

     

    session.close();

     

    System.out.println(“------------------------------------------”);

    ………

    Query query = session.createQuery(“ from Student s”);

    query.setCacheable(true);

    List students = query.list();

    for(Iterator iter = students.iterate();iter.hasNext();){

           Student stu = (Student)iter.next();

           System.out.println(stu.getName());

    第二去查詢數據庫時,會發出N條sql語句,因為開啟了查詢緩存,關閉了二級緩存,那么查詢緩存會緩存實體對象的id,所以hibernate會根據實體對象的id去查詢相應的實體,如果緩存中不存在相應的實體,那么將發出根據實體id查詢的sql語句,否則不會發出sql,使用緩存中的數據

     

    六.  開啟查詢緩存,開啟二級緩存,開啟兩個session,分別調用query.list (查詢實體對象)

     

    Query query = session.createQuery(“ from Student s”);

    query.setCacheable(true);

    List students = query.list();

    for(Iterator iter = students.iterate();iter.hasNext();){

           Student stu = (Student)iter.next();

           System.out.println(stu.getName());

    }

     

    session.close();

     

    System.out.println(“------------------------------------------”);

    ………

    Query query = session.createQuery(“ from Student s”);

    query.setCacheable(true);

    List students = query.list();

    for(Iterator iter = students.iterate();iter.hasNext();){

           Student stu = (Student)iter.next();

           System.out.println(stu.getName());

    }

     

    第二不會發出sql,因為開啟了二級緩存和查詢緩存,查詢緩存緩存了實體對象的id列表,hibernate會根據實體對象的id列表到二級緩存中取得相應的數據

    posted on 2009-04-06 11:58 胡鵬 閱讀(4882) 評論(0)  編輯  收藏 所屬分類: hibernate

    導航

    <2009年4月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 粉色视频在线观看www免费| 日韩亚洲国产综合高清| 日韩在线视频免费| 全部免费国产潢色一级| 美景之屋4在线未删减免费| 免费大香伊蕉在人线国产| 国产一区二区三区亚洲综合| 免费国产a国产片高清网站| 国产精品久久久久久亚洲小说 | 性xxxxx大片免费视频| 亚洲av无码不卡一区二区三区| 好男人资源在线WWW免费 | 免费大黄网站在线观| 人妻仑刮八A级毛片免费看| 亚洲国产主播精品极品网红| 四虎国产精品永免费| 亚洲精品无码成人片久久| 91精品全国免费观看含羞草| 亚洲人成网站日本片| 永久免费AV无码网站在线观看| 免费国产高清毛不卡片基地| 亚洲乱色熟女一区二区三区丝袜 | 国产gav成人免费播放视频| 一级一级一片免费高清| 亚洲s色大片在线观看| 大学生一级毛片免费看| 国产精品成人亚洲| 亚洲色精品88色婷婷七月丁香 | 91精品全国免费观看含羞草| 亚洲性线免费观看视频成熟| 亚洲AⅤ视频一区二区三区| 免费av片在线观看网站| 男人天堂2018亚洲男人天堂| 中文字幕专区在线亚洲| 国产免费丝袜调教视频| 美女被免费视频网站a| 亚洲综合激情九月婷婷 | 亚洲精品无码成人AAA片| 福利免费观看午夜体检区| 一级特黄录像免费播放中文版| 久久亚洲国产成人精品性色|