隨筆 - 0, 文章 - 75, 評(píng)論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          Hibernate入門

          創(chuàng)建Hibernate配置文件

          hibernate.cfg.xml



          <hibernate-configuration>


          <session-factory>


          <property name="dialect">



          org.hibernate.dialect.Oracle9Dialect


          </property>


          <property
          name="
          connection.url">


          jdbc:oracle:thin:@127.0.0.1:1521:ORCL


          </property>


          <property
          name="
          connection.username">jbit</property>


          <property
          name="
          connection.password">bdqn</property>


          <property
          name="
          connection.driver_class">


          oracle.jdbc.driver.OracleDriver


          </property>


          <property
          name="show_sql">true</property>



          <!--省略其他配置-->



          <!--
          注意配置文件名必須包含其相對(duì)于classpath
          的全路徑-->


          <mapping
          resource="
          cn/jbit/houserent/entity/User.hbm.xml"
          />


          </session-factory>


          </hibernate-configuration>



          配置User類的映射文件


          <hibernate-mapping>


          <class
          name="cn.jbit.houserent.bean.User"
          table="
          users">



          <
          id
          name="id"
          type="
          java.lang.Integer">



          <
          column
          name="id"
          />



          <
          generator
          class="sequence"
          >



          <
          param
          name="sequence">SEQ_ID</param>



          </
          generator>



          </
          id>



          <
          property
          name="name"
          type="java.lang.String">



          <
          column
          name="name"
          length="50"
          not-null="true"
          />



          </
          property>



          <
          property
          name="password"
          type="java.lang.String">



          <
          column
          name="password"
          length="50"
          not-null="true"
          />



          </
          property>



          <!--
          省略其他配置-->


          </class>


          </hibernate-mapping>



          使用Hibernate操作數(shù)據(jù)庫需要七個(gè)步驟

          hibernate-mapping>

          1.讀取并解析配置文件

          Configuration conf = new Configuration().configure();

          2.讀取并解析映射信息,創(chuàng)建SessionFactory

          SessionFactory sf = conf.buildSessionFactory();

          3.打開Session

          Session session = sf.openSession();
          //sf.getCurrentSession();

          4.開始一個(gè)事務(wù)(增刪改操作必須,查詢操作可選)

          Transaction tx = session.beginTransaction();

          5.數(shù)據(jù)庫操作

          session.save(user); //或其他操作

          6.提交事務(wù)(回滾事務(wù))

          tx.commit(); (tx.rollback();)

          7.關(guān)閉session

          如果Hibernate配置文件中,current_session_context_class參數(shù)設(shè)置為thread并采用SessionFactory的getCurrentSession()方法獲得Session實(shí)例則不需要此步

          session.close();


          代碼:

          Configuration
          conf
          = null;

          SessionFactory
          sessionFactory
          =
          null;

          Session
          session
          =
          null;

          Transaction
          tx
          =
          null;


          try {


          conf = new
          Configuration().configure();


          sessionFactory
          =
          conf.buildSessionFactory();


          session = sessionFactory.openSession();


          tx
          =
          session.beginTransaction();


          session.save(user);


          tx.commit();


          }
          catch (
          HibernateException
          e)
          {


          tx.rollback();


          e.printStackTrace();


          } finally{


          session.close();


          sessionFactory.close();


          }




          使用Hibernate實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的查詢操作:

          Object
          get(Class class,Serializable id)

          Object
          load(Class theClass,Serializable id)

          兩種方法都可以加載數(shù)據(jù),但有一定區(qū)別

          session.load(User.class,1002);

          或者:

          session.get(User.class,1002);


          當(dāng)使用Session的get方法時(shí),如果加載的數(shù)據(jù)不存在,get方法會(huì)返回一個(gè)null對(duì)象


          使用load方法時(shí),如果加載的數(shù)據(jù)不存在,系統(tǒng)就會(huì)拋出異常


          get方法即時(shí)加載


          load方法支持lazy延遲加載




          Hibernate中實(shí)體對(duì)象的三種狀態(tài):


          瞬時(shí)狀態(tài)(Transient)

          剛用new語句創(chuàng)建,還沒有被持久化,且不處于Session的緩存中

          持久狀態(tài)(Persistent)

          已經(jīng)被持久化,且加入到Session的緩存中

          游離狀態(tài)(Detached)

          已經(jīng)被持久化,但不再處于Session的緩存中



          總結(jié):


          Hibernate是一個(gè)基于JDBC的持久化解決方案,是一個(gè)優(yōu)秀的"對(duì)象一關(guān)系映射"框架


          使用Hibernate前要做好以下三個(gè)準(zhǔn)備。


          1.添加需要的jar包


          2.配置Hibernate配置文件


          3.創(chuàng)建實(shí)體類和映射文件


          使用Hibernate完成持久化操作需要以下七個(gè)步驟


          1.讀取并解析配置文件


          2.讀取并解析映射文件,創(chuàng)建SessionFactory


          3.打開Session


          4.開啟事務(wù)(查詢操作不需要)


          5.執(zhí)行持久化方法


          6.提交事務(wù)


          7.關(guān)閉Session


          使用提取重復(fù)代碼到基類的技巧可以簡化“七個(gè)步驟”


          Hibernate中將所操作的實(shí)體對(duì)象的狀態(tài)分為三種,分別為Transient(瞬時(shí)狀態(tài))
          Persistent(持久狀態(tài)) 以及Detached(游離狀態(tài))




          注意:


          openSession用一次


          用getSession獲得session省資源



          加載Hibernate的jar包:


          需要f:\hibernate-distribution-3.3.2.GA\Hibernate3.jar和f:\hibernate-distribution-3.3.2.GA\lib\required目錄下的所有jar包


          還需加載JDBC驅(qū)動(dòng)包



          事務(wù)寫在業(yè)務(wù)層,若寫在DAO層,無論執(zhí)行何種操作都只是操作的一個(gè)對(duì)象,不存在事務(wù)的價(jià)值


          session管理50000個(gè)操作,若超出范圍則會(huì)異常,使用假提交,把壓力扔給數(shù)據(jù)庫


          getSession.flush(); //Hibernate批量處理


          getSession.clear();

          posted on 2012-04-22 15:48 hantai 閱讀(124) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 古丈县| 密云县| 中方县| 五家渠市| 曲麻莱县| 嵩明县| 南靖县| 凌云县| 新龙县| 湾仔区| 宜丰县| 广州市| 谢通门县| 伊金霍洛旗| 北京市| 乳源| 航空| 吉木萨尔县| 开原市| 长海县| 乐东| 彰化市| 平远县| 临朐县| 定南县| 德惠市| 万源市| 松江区| 泽州县| 施秉县| 乌审旗| 兴海县| 获嘉县| 栾城县| 东台市| 新丰县| 师宗县| 巴楚县| 大洼县| 罗源县| 全州县|