<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ù)入庫導(dǎo)致內(nèi)存溢出

    *先flush,再clear

     

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

     

    一.Load測試: 在同一個(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ù)庫,因?yàn)樗荓AZY的,當(dāng)使用的時(shí)候才去查詢數(shù)據(jù)庫,  第二次load的時(shí)候也不會(huì),當(dāng)使用的時(shí)候也不會(huì)查詢數(shù)據(jù)庫,因?yàn)樗诰彺胬镎业剑粫?huì)發(fā)出sql

     

     

    Load測試: 開啟兩個(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ù)庫,因?yàn)樗荓AZY的,當(dāng)使用的時(shí)候才去查詢數(shù)據(jù)庫,  第二次load的時(shí)候也不會(huì),當(dāng)使用的時(shí)候查詢數(shù)據(jù)庫,因?yàn)閟ession間不能共享一級(jí)緩存的數(shù)據(jù),因?yàn)樗麜?huì)隨session的生命周期存在和消亡

     

     

    二.Get測試: 在同一個(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ù)庫,第二次get的時(shí)候不會(huì)查詢數(shù)據(jù)庫,因?yàn)樗诰彺胬镎业剑粫?huì)發(fā)出sql

     

     

    三.iterate測試: 在同一個(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查詢屬性測試: 同一個(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ù)庫中批量加入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 胡鵬 閱讀(413) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate

    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 免费国产草莓视频在线观看黄| 亚洲熟妇无码八V在线播放| 日韩亚洲AV无码一区二区不卡| 亚洲免费在线观看视频| 羞羞的视频在线免费观看| 免费A级毛片无码视频| www国产亚洲精品久久久日本| 久久久久久亚洲AV无码专区 | 亚洲s码欧洲m码吹潮| 久9热免费精品视频在线观看| 国产自产拍精品视频免费看| 亚洲国产精品一区二区久久| 免费看一级一级人妻片| 亚洲国产香蕉人人爽成AV片久久| 2020天堂在线亚洲精品专区| 久久成人a毛片免费观看网站| 亚洲人成无码久久电影网站| 亚洲gay片在线gv网站| 国产伦精品一区二区三区免费下载| 亚洲欧洲日产国码在线观看| 亚洲免费视频网站| 亚洲一区二区三区免费在线观看| 免费在线看黄网站| 国产偷窥女洗浴在线观看亚洲| 亚洲AV永久无码精品网站在线观看| 无码日韩人妻av一区免费| 亚洲色偷偷偷网站色偷一区| 中文字幕乱码免费看电影| 国产成人免费网站在线观看| xvideos永久免费入口| 亚洲精品网站在线观看不卡无广告| 91免费国产视频| 亚洲人配人种jizz| 成人亚洲网站www在线观看| 可以免费观看的国产视频| 亚洲一本到无码av中文字幕| 在线观看亚洲成人| 老司机精品免费视频| 国产亚洲综合网曝门系列| 中文在线日本免费永久18近| 亚洲乱码在线播放|