<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 胡鵬 閱讀(4889) 評論(0)  編輯  收藏 所屬分類: hibernate

    導航

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

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久精品亚洲男人的天堂| 男人的天堂亚洲一区二区三区 | 在线观看亚洲天天一三视| a国产成人免费视频| 四虎影视永久免费观看网址| 亚洲精华国产精华精华液好用| 国内免费高清在线观看| 亚洲色精品VR一区区三区| fc2成年免费共享视频18| 四虎成年永久免费网站| jlzzjlzz亚洲jzjzjz| 免免费国产AAAAA片| 亚洲宅男天堂在线观看无病毒| 久久精品免费网站网| 亚洲avav天堂av在线不卡 | 国产精品亚洲精品久久精品| 青青青国产免费一夜七次郎| 亚洲欧美日韩一区二区三区在线| 免费高清在线爱做视频| 国产在亚洲线视频观看| 国产亚洲成人在线播放va| 国内精品久久久久影院免费| 亚洲综合男人的天堂色婷婷| 欧美a级在线现免费观看| 春暖花开亚洲性无区一区二区| 亚洲夜夜欢A∨一区二区三区| 99精品在线免费观看| 久久亚洲精品专区蓝色区| 无码国模国产在线观看免费| 一区二区3区免费视频| 亚洲国产综合专区在线电影| 性一交一乱一视频免费看| h在线看免费视频网站男男| 亚洲AV一宅男色影视| 国产精品无码永久免费888 | 亚洲综合免费视频| 国产免费AV片无码永久免费| APP在线免费观看视频| 国产v亚洲v天堂a无| 久久亚洲精品无码观看不卡| 久久精品国产免费观看三人同眠|