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"/> //主鍵生成政策
/>
主鍵生成政策