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

    導航

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

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产成a人v在线| 亚洲AV成人片色在线观看| 亚洲小说图区综合在线| 国产精品成人免费视频网站京东 | 亚洲国产成人精品女人久久久 | 亚洲乱码一区av春药高潮| 毛片大全免费观看| 亚洲av午夜电影在线观看| 天堂亚洲免费视频| 成人A毛片免费观看网站| 日产亚洲一区二区三区| 波多野结衣免费在线| 亚洲人成色77777在线观看| 国产在线播放免费| 2022免费国产精品福利在线| 亚洲国产精品无码专区在线观看| 一级毛片免费播放| 亚洲一级片在线观看| 在线永久免费观看黄网站| sss在线观看免费高清| 少妇中文字幕乱码亚洲影视| 黄页网站免费观看| 高h视频在线免费观看| 国产aⅴ无码专区亚洲av| 无人在线观看免费高清视频| 西西人体大胆免费视频| 亚洲国产精品久久久久婷婷软件| 毛片免费观看网址| 91在线视频免费观看| 亚洲一区二区三区在线| 亚洲AV网站在线观看| 99久久精品国产免费| 国产成人精品久久亚洲高清不卡| 亚洲伊人色欲综合网| 日韩版码免费福利视频| 四虎永久在线精品免费一区二区 | 日韩亚洲人成在线综合日本| 免费电影在线观看网站| 国产在线观看无码免费视频| 亚洲乱码中文论理电影| 亚洲日韩v无码中文字幕 |