天天看點

Hibernate學習筆記之二

Hibernate學習筆記之二

hibernate的執行流程

Hibernate學習筆記之二
  • Configuration對象讀取hibernate.cfg.xml檔案,建立SessionFactory對象
  • SessionFactory對象讀取加載的對象-關系映射檔案,以此建立Session對象
  • Session對象實作資料庫的增删改查,需要開啟事務,封裝在事務當中
  • 最後需要送出事務并關閉SessionFactory和Session

session簡介

  • 不建議使用jdbc的connection對象操作資料庫,而使用session來操作資料庫
  • session與connection是多對一的關系,多個session對應一個connection
  • 把對象儲存到資料庫中需要調用session的各種方法,如:sava()、update()、delete()、createQuery()等。

transaction簡介

  • hibernate對資料的操作都是封裝在事務中,預設非自動送出(可以調用session對象的doWork()方法獲得jdbc的connection後,設定為自動送出事務模式,不建議)

session詳解

如何獲得session對象

  • openSession()或者getCurrentSession()(使用getCurrentSession()需要在hibernate.cfg.xml檔案中進行相應配置)
<property name="hibernate.current_session.context_class">thread|jta</property>
//thread本地事務(jdbc事務)
//jta全局事務(jta事務)
           
  • openSession()與getCurrentSession()差別

    1)getCurrentSession()在事務送出或者復原後自動關閉,而openSession()需要手動關閉。openSession()未手動關閉,多次之後會導緻連接配接池溢出。

    2)openSession()每次建立新的session對象,getCurrentSession()每次使用已有的session對象。

hbm配置文檔常用設定

<hibernate-mapping
schema="schemaName"                         //模式名稱
catalog="catalogName"                       //目錄名稱
default-cascade="cascade_style"             //級聯風格  
default-access="field|property|ClassName"   //通路政策
default-lazy="true|false"                   //加載政策
package="packageName"                       //包名
/>
           
<class
name="ClassName"            //類名
table="tableName"           //對應的表名
batch-size="N"              //抓取政策,一次抓取N條記錄
where="condition"           //抓取條件
entity-name="EntityName"    //支援同一個類映射多個表
/>
           
<id                                     //表的主鍵
name="propertyName"                     //映射的屬性
type="typeName"                         //映射的屬性的資料類型
column="column_name"                    //映射的資料庫中字段名稱
length="length"                         //字段長度
<generator class="GeneratorClass"/>     //主鍵生成政策
/>
           

主鍵生成政策

Hibernate學習筆記之二

繼續閱讀