亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁(yè) | 考試用書(shū) | 培訓(xùn)課程 | 模擬考場(chǎng) | 考試論壇  
      全國(guó)  |             |          |          |          |          |         
        當(dāng)前位置:計(jì)算機(jī)等級(jí) > 二級(jí)考試 > Java語(yǔ)言程序設(shè)計(jì) > 考試輔導(dǎo) > 文章內(nèi)容
        

      全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)Java重點(diǎn)內(nèi)容(54)

      中華IT學(xué)院   【 】  [ 2016年11月21日 ]

       

      1.Hibernate框架的特性

        1)一級(jí)緩存

            session對(duì)象級(jí)別的緩存,利用該session取出的對(duì)象會(huì)放到緩存中.在后續(xù)查詢時(shí),首先去緩存中尋找,沒(méi)有再去數(shù)據(jù)庫(kù)尋找.

            session緩存區(qū)在session關(guān)閉后銷毀.session復(fù)雜維護(hù)緩存區(qū)中對(duì)象的狀態(tài).

            在使用時(shí),為了更好發(fā)揮一級(jí)緩存,需要保障同一個(gè)線程處理中,使用同一個(gè)Session對(duì)象.

      a.使用ThreadLocal對(duì)SessionUtil進(jìn)行改造,將Session對(duì)象與ThreadLocal綁定.

      public class HibernateUtil {

               private static ThreadLocal tl=new ThreadLocal();

               private static Configuration conf;

               private static SessionFactory factory;

      static {conf=new Configuration();factory=conf.buildSessionFactory();}

      public static  Session getSession(){ Session session=tl.get();

               if(session==null){ session=factory.openSession(); tl.set(session);}return session; }

               public static Session closeSession(){ Session session=tl.get(); if(session!=null){session.close();tl.set(null);

                         }return session;}}

          b.Hibernate3之后的新版本,可以使用以下方法

            首先在hibernate.cfg.xml中添加配置

           

                         thread

           

            之后使用sessionFactory.getCurrentSession()方法獲取Session

       

          注意:在使用此session時(shí),必須將session操作封裝在一個(gè)transaction

        

          一級(jí)緩存的管理:

           session.evict(obj);將obj對(duì)象從當(dāng)前session的一級(jí)緩存中清除.

           session.clear():清除當(dāng)前session的一級(jí)緩存.

       

        2)延遲加載

          當(dāng)獲取一個(gè)實(shí)體對(duì)象后,實(shí)體對(duì)象并沒(méi)有立刻發(fā)送SQL語(yǔ)句,去數(shù)據(jù)庫(kù)加載數(shù)據(jù).而是在調(diào)用對(duì)象的getXXX()方法時(shí)采取加載數(shù)據(jù).

          支持延遲加載的方法:session.load(),query.iterator().延遲加載方法返回的對(duì)象類型,是動(dòng)態(tài)代理類型.

          session.get()和session.load()方法功能是按主鍵做條件查詢數(shù)據(jù),區(qū)別

      如下:   

          a.get()方法不支持延遲加載,load()方法支持

          b.如果數(shù)據(jù)表中沒(méi)有符合的記錄,get()方法返回null,load()拋異常

          c.如果數(shù)據(jù)表中有符合的記錄,get()返回的是實(shí)體類型對(duì)象,load()返回的是動(dòng)態(tài)代理類型對(duì)象.

        

          在使用時(shí),需要注意以下事項(xiàng):

            a.使用延遲加載的API后,避免過(guò)早的關(guān)閉Session.

      LazyInitializationException: could not initialize proxy - no Session

            b.根據(jù)需要選擇延遲加載和非延遲加載API

      -----------------了解---------------------- 

         Hibernate延遲加載機(jī)制:利用動(dòng)態(tài)生成代理類型機(jī)制生成一個(gè)動(dòng)態(tài)代理類,并重寫(xiě)對(duì)象的getXXX()方法,當(dāng)調(diào)用get方法時(shí),觸發(fā)SQL查詢,去數(shù)據(jù)庫(kù)加載數(shù)據(jù).

         Hibernate動(dòng)態(tài)生成代理類型機(jī)制:

         以前編寫(xiě)程序:

           a.編寫(xiě)一個(gè)類源碼

           b.調(diào)用編譯器將源碼編譯成class字節(jié)碼

           c.類加載器將字節(jié)碼文件載入虛擬機(jī)內(nèi)容

           d.虛擬機(jī)調(diào)用字節(jié)碼文件的方法,解釋運(yùn)行

         Session.load()等延遲方法返回的類型是Foo$Enhancer$CGLIB....,

      這些類型是Hibernate框架利用程序在內(nèi)容中動(dòng)態(tài)生成并編譯的類型.

      上述功能,是Hibernate調(diào)用asm.jar,cglib-2.1.3.jar工具包完成的.

         asm.jar主要用于在內(nèi)存中動(dòng)態(tài)和編譯生成一個(gè)類

         cglib.jar是基于asm.jar,對(duì)其擴(kuò)展,在內(nèi)存中生成一個(gè)代理類型.該代理類是原類型的一個(gè)子類.

        3)Hibernate中對(duì)象的狀態(tài)

          在Hibernate使用中,對(duì)象的狀態(tài)有以下三種

          a.臨時(shí)對(duì)象 : 在程序中使用new方式創(chuàng)建的對(duì)象

          b.持久對(duì)象 : 在程序中與session對(duì)象關(guān)聯(lián),由session負(fù)責(zé)管理的對(duì)象.

      首頁(yè) 1 2 尾頁(yè)
      分享到:
      本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
      將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問(wèn)考試網(wǎng) | 復(fù)制本頁(yè)地址,傳給QQ/MSN上的好友 | 申請(qǐng)鏈接 | 意見(jiàn)留言 TOP
      關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
      Copyright © 2006-2017 中華考試網(wǎng)(Examw.com) All Rights Reserved  營(yíng)業(yè)執(zhí)照