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方法拋出異常。