Hibernate筆記

ORM(Object/Relationship Mapping):對象/關係映射

 

創建Hibernate的配置文件

創建持久化類

創建對象-關係映射文件

通過HibernateAPI編寫訪問數據庫的代碼

 

MYSQL語句的規範

關鍵字與函數名稱全部大寫

數據庫名稱、表名稱、字段名稱全部小寫

SQL語句必須以分號結尾

 

hibernate.cfg.xml常用配置

hibernate.show_sql SQL語句輸出到控制檯

hibernate.format_sql 輸出到控制檯的SQL語句是否排版

hbm2ddl.auto CREATE/UPDATE可以幫助由java代碼生成數據庫腳本進而生成具體的表結構

hibernate.default_schema 默認的數據庫

hibernate.dialect 配置數據庫方言

 

session可以理解爲操作數據庫的對象。session與connection,是哦多對一的關係,每個session都有一個與之對應的connection,一個connection不同時刻可以供多個session使用。

 

hibernate對數據的操作都封裝在事物當中,並且默認是非自動提交的方式。

 

獲得session對象:

1)  openSession

2)  getCurrentSession

如果使用getCurrentSession需要在hibernate.cfg.xml文件中進行配置:

如果是本地事物(jdbc事務)

<propertyname=”hibernate.current_session_context_class”>thread</property>

如果是全局事務(jta事務)

<propertyname=”hibernate.current_session_context_class”>jta</property>

 

openSession與getCurrentSession的區別

1.      getCurrentSession在事務提交或者回滾之後會自動關閉,而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”

where=”condition”

entity-name=”EntityName:

/>

 

<id

name=”propertyName”

type=”typename”

column=”column_name”

length=”length”

<generator class=“generatorClass”/

</id>

 

單一主鍵

assigned由java應用程序負責生成

native由底層數據庫自動生成標示符

 

組件屬性

實體類中的某個屬性屬於用戶自定義的類的對象

<componentname=”address” class=”Address”>

<property name=”postcode” column=”POSTCODE”></property>

<property name=”phone” column=”PHONE”></property>

<property name=”address” column=ADDRESS”></property>

</component>

 

get與load的區別

在不考慮緩存的情況下,get方法會在調用之後立即向數據庫發出sql語句,返回持久化對象。load方法會在調用後返回一個代理對象,該代理對象只保存了實體對象的id,直到使用對象的非主鍵屬性時纔會發出sql語句。

查詢不存在的數據時,get方法返回null,load方法拋出異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章