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

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

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

    hibernate一級(jí)緩存

    hibernate 一級(jí)緩存:(緩存的是實(shí)體對(duì)象)

    一級(jí)緩存很短和session的生命周期一致,一級(jí)緩存也叫session級(jí)的緩存或事務(wù)緩存

     

    哪些方法支持一級(jí)緩存:

    *get()

    *load()

    *iterate()  (查詢實(shí)體對(duì)象)

     

    如何管理一級(jí)緩存:

    * session.clear() session.evict()

     

    如何避免一次性大量的實(shí)體數(shù)據(jù)入庫(kù)導(dǎo)致內(nèi)存溢出

    *先flush,再clear

     

    如果數(shù)據(jù)量特別大,考慮采用jdbc實(shí)現(xiàn),如果jdbc也不能滿足要求,可以考慮采用數(shù)據(jù)庫(kù)本身的特定導(dǎo)入工具

     

    一.Load測(cè)試: 在同一個(gè)session中發(fā)出兩次load查詢

           Student sutdent = (Student)session.load(Student.class,1);

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

     

           sutdent = (Student)session.load(Student.class,1);

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

           在同一個(gè)session中發(fā)出兩次load查詢,第一次load的時(shí)候不會(huì)去查詢數(shù)據(jù)庫(kù),因?yàn)樗荓AZY的,當(dāng)使用的時(shí)候才去查詢數(shù)據(jù)庫(kù),  第二次load的時(shí)候也不會(huì),當(dāng)使用的時(shí)候也不會(huì)查詢數(shù)據(jù)庫(kù),因?yàn)樗诰彺胬镎业剑粫?huì)發(fā)出sql

     

     

    Load測(cè)試: 開啟兩個(gè)session中發(fā)出兩次load查詢

    Student sutdent = (Student)session.load(Student.class,1);

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

    sessioin.close();

    ………..

           sutdent = (Student)session.load(Student.class,1);

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

           開啟兩個(gè)session中發(fā)出兩次load查詢,第一次load的時(shí)候不會(huì)去查詢數(shù)據(jù)庫(kù),因?yàn)樗荓AZY的,當(dāng)使用的時(shí)候才去查詢數(shù)據(jù)庫(kù),  第二次load的時(shí)候也不會(huì),當(dāng)使用的時(shí)候查詢數(shù)據(jù)庫(kù),因?yàn)閟ession間不能共享一級(jí)緩存的數(shù)據(jù),因?yàn)樗麜?huì)隨session的生命周期存在和消亡

     

     

    二.Get測(cè)試: 在同一個(gè)session中發(fā)出兩次get查詢

        Student sutdent = (Student)session.get(Student.class,1);

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

     

           sutdent = (Student)session.get(Student.class,1);

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

           在同一個(gè)session中發(fā)出兩次get查詢, 第一次get的時(shí)候去查詢數(shù)據(jù)庫(kù),第二次get的時(shí)候不會(huì)查詢數(shù)據(jù)庫(kù),因?yàn)樗诰彺胬镎业剑粫?huì)發(fā)出sql

     

     

    三.iterate測(cè)試: 在同一個(gè)session中發(fā)出兩次iterator查詢

    Student student = (Student)session.createQuery(“from Student s where s.id=1”).iterate().next();

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

     

    student = (Student)session.createQuery(“from Student s where s.id=1”).iterate().next();

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

           在同一個(gè)session中發(fā)出兩次iterator查詢,第一次iterate().next()的時(shí)候會(huì)發(fā)出查詢id的sql,使用的時(shí)候會(huì)發(fā)出相應(yīng)的查詢實(shí)體對(duì)象,第二次iterate().next()的時(shí)候會(huì)發(fā)出查詢id的sql,不會(huì)發(fā)出查詢實(shí)體對(duì)象的sql,因?yàn)閕terate使用緩存,不會(huì)發(fā)出sql

     

     

    四.Iterate查詢屬性測(cè)試: 同一個(gè)session中發(fā)出兩次查詢屬性

    String name = (String)session.createQuery(“select s.name from Student s where s.id=1”).iterate().next();

    System.out.println(name);

     

    String name = (String)session.createQuery(“select s.name from Student s where s.id=1”).iterate().next();

    System.out.println(name);

           在同一個(gè)session中發(fā)出兩次查詢屬性, 第一次iterate().next()的時(shí)候會(huì)發(fā)出查詢屬性的sql,第二次iterate().next()的時(shí)候會(huì)發(fā)出查詢屬性的sql,iterate查詢普通屬性,一級(jí)緩存不會(huì)緩存,所以會(huì)發(fā)出sql

     

     

    五.同一個(gè)session中先save,再發(fā)出load查詢save過的數(shù)據(jù)

     

           Student stu = new Student();

           stu.setName(“王五”);

     

       Serializable id = session.save(stu);

     

    Student sutdent = (Student)session.load(Student.class,id);

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

     

          

    save的時(shí)候,他會(huì)在緩存里放一份,不會(huì)發(fā)出sql,因?yàn)閟ave是使用緩存的

    六.同一個(gè)session中先調(diào)用load查詢,然后執(zhí)行sessio.clear()session.evict(),再調(diào)用load查詢

     

    Student sutdent = (Student)session.load(Student.class,1);

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

           session.clear();

     

    Student sutdent = (Student)session.load(Student.class,1);

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

     

     

           sessio.clear()或session.evict()可以管理一級(jí)緩存,一級(jí)緩存無法取消,但可以管理.

    上面的語句都會(huì)發(fā)出sql 因?yàn)橐患?jí)緩存中的實(shí)體被清除了

     

    七.向數(shù)據(jù)庫(kù)中批量加入1000條數(shù)據(jù)

     

    for(int i=0;i<1000;i++){

           Student student = new Student();

           student.setName(“s” + i);

           session.save(student);

    //每20條數(shù)據(jù)就強(qiáng)制session將數(shù)據(jù)持久化,同時(shí)清除緩存,避免大量數(shù)據(jù)造成內(nèi)存溢出

           if( i %20 == 0 ){

                  session.flush();

                  session.clear();

    }

    }

     

    posted on 2009-04-06 11:59 胡鵬 閱讀(414) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate

    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 又粗又硬又大又爽免费视频播放| a级毛片在线免费观看| 国产在线观看麻豆91精品免费| 亚洲AV成人片色在线观看| 日本免费人成网ww555在线| 国产V亚洲V天堂无码| 免费91最新地址永久入口| 亚洲bt加勒比一区二区| 无码人妻精品中文字幕免费 | a级毛片毛片免费观看久潮| 亚洲日产韩国一二三四区| 成人黄网站片免费视频| 亚洲AV永久纯肉无码精品动漫| 三级网站免费观看| 亚洲黄色在线观看网站| av无码国产在线看免费网站| 亚洲一区二区三区久久| 永久免费看bbb| www.xxxx.com日本免费| 亚洲A∨无码无在线观看| 在线精品一卡乱码免费| jizzjizz亚洲日本少妇| 日韩免费无砖专区2020狼| 亚洲精品亚洲人成在线| 最近国语视频在线观看免费播放 | 24小时日本电影免费看| 国产亚洲sss在线播放| 免费一级毛片在级播放| 国产成人免费ā片在线观看老同学| 亚洲综合久久综合激情久久| 免费无码黄动漫在线观看| 国产精品成人免费观看| 亚洲国产超清无码专区| yy6080亚洲一级理论| 色欲色香天天天综合网站免费| 精品国产成人亚洲午夜福利| 在线a亚洲v天堂网2018| 99久久久国产精品免费牛牛| 亚洲av永久无码天堂网| 亚洲色图在线播放| 亚洲成a人片在线观看国产|