今天學習Heribernate 是湯陽光老師講的,湯老師先講一個Heribernate實際應用中的例子,通過例子講解了Heribernate的實現原理,如何使用和使用它帶來的好處。還有具體的如何配置環境,編寫配置文件,Hibernate對象實例的三種狀態。並對一般這三種狀態的命名進行了修正。下面來介紹一下主要內容。
配置環境,可以把Heribernate/lib中的jar包全部導入,也可以只導入其中必須的一部分。
1.導入jar包,這些最基本的包有:
hibernate3.jar
antlr-2.7.6.jar
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
jta.jar
所用的數據庫的JDBC驅動
可以選擇加入log4j-1.2.11.jar。
2,拷貝配置文件hibernate.cfg.xml到classpath的根中,並修改其中的數據庫連接信息。選擇拷貝log4j.properties文件。這裏使用mysql5.0版本的數據庫,更改配置文件如下:
<!--配置方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_demo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!-- 顯示sql語句 -->
<property name="show_sql">true</property>
<!-- 自動更新表結構 -->
<property name="hbm2ddl.auto">update</property>
一個Heribernate實體對應一個數據庫中的表,Heribernate對實體的要求: 1,有默認的構造方法;
2,推薦提供一個標識屬性(與業務無關的id);
3,推薦此類不是final的(對懶加載有影響);
4,推薦重寫hashCode與equals方法。
每個實體類要編寫一個.hbm.xml文件,將類映射爲數據庫中的一個表,並添加和其他表間的關係,表的屬性映射有name,colum,type,length,not-null. id映射與主鍵生成策略;unsaved-value:一個特定的標識屬性值,用來標專該實例是剛剛創建的,尚未保存。默認是由hibernate選擇一個合理的值。在id或property中指定column信息或使用<column>子元素。來指定數據庫表中的列名。
主鍵生成策略:identity, increment, ehilo, native.
常用的映射類型:integer,string,date,timestamp,text,byte[].
時間類型映射: 生日(date);
大文本類型映射:描述(text);
二進制類型映射:文件(byte[]);
對象實例的三種狀態:自由(瞬時)、持久、遊離;
自由(瞬時)狀態:從未與任何Session關聯過,一般指新創建的對象實例。
持久狀態:目前正與Session有關聯,擁有持久化標識(相當於主鍵值), 並且相關聯的session沒有關閉,事務沒有提交。持久對象狀態發生改變,在事務提交時會更新到數據庫。
遊離狀態:曾經與Session關聯過,不過那個Session已經關閉了。
持久狀態的對象和遊離狀態的對象在數據庫表中都不能肯定有一條記錄相對應。