Hibernate.cfg.xml主配置文件配置:
1、配置數據庫的信息:包括數據庫方言、數據庫URL、數據庫驅動、用戶名、密碼
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.username">xxx</property>
<property name="connection.password">xxx123</property>
2、其他配置:
(1)是否顯示SQL語句:
其中"show_sql"爲true表示顯示SQL語句,爲false表示不顯示SQL語句,"format_sql"爲true表示格式化顯示的SQL語句,爲 false表示不格式化顯示的SQL語句。
<property name="show_sql">true</property>
<property name="format_sql">true</property>
(2)配置是否自動建表:
其中可選的值有:
a、create:先刪除,再創建
b、update:如果表不存在就創建,不一樣就更新,一樣就什麼都不做
c、create-drop:初始化時創建表,SessionFactory執行close()時刪除表
d、validate:驗證表結構是否一致,如果不一致,就拋異常
<property name="hbm2ddl.auto">update</property>
(3)配置事務隔離級別:
1表示讀操作未提交,2表示讀操作已提交,4表示可重複讀,8表示可串行化
<property name="connection.isolation">2</property>
(4)數據庫連接池配置(c3p0):
<!-- 使用c3p0連接池 配置連接池提供的供應商 -->
<property name="connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<!-- 在連接池中可用的數據庫連接最少數目 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 在連接池中所有數據庫連接的最大數目 -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- 設定數據庫連接的過期時間,以秒爲單位,
如果連接池中的某個數據庫連接處於空閒狀態超過了timeout時間,就會從連接池中清除
-->
<property name="hibernate.c3p0.timeout">120</property>
<!-- 每3000秒檢查所有連接池中的空閒連接,以秒爲單位 -->
<property name="hibernate.c3p0.idle_test_period">3000</property>
(5)二級緩存配置:
二級緩存默認是未打開的,所以要使用二級緩存,就要如下配置。第2-4行配置的是緩存的提供商,如果要使用更高級的緩存提供商,那麼可以查閱Hibernate文檔,並導入相應的包。第7行配置的是查詢緩存的開關,表示當使用hql語句進行查詢的時候,是否將查詢結果保存到二級緩存中。第10-11行配置的是指定要使用二級緩存的實體類,"read-only"表示只讀,如果既要讀也要寫的話,可以使用"read-write"。第14行配置的是集合緩存,表示當通過一個對象中的集合屬性找到另一個與之關聯的對象是,也要保存到二級緩存。
<!-- 指定要使用的緩存的提供商,這也就打開了二級緩存 -->
<property name="cache.provider_class">
org.hibernate.cache.HashtableCacheProvider
</property>
<!-- 查詢緩存開關,true開啓使用查詢緩存-->
<property name="cache.use_query_cache">true</property>
<!-- 指定要使用二級緩存的實體類 -->
<class-cache usage="read-only" class="edu.fjnu.l_hbm_second_cache.Department"/>
<class-cache usage="read-only" class="edu.fjnu.l_hbm_second_cache.Employee"/>
<!-- 集合緩存 -->
<collection-cache usage="read-only" collection="edu.fjnu.l_hbm_second_cache.Department.employees"/>
(6)導入映射文件:把所有實體類對應的*.hbm.xml文件都導入到主配置文件中,注意映射文件地址的書寫方式
<mapping resource="edu/fjnu/domain/User.hbm.xml"/>
1、一對多:
name表示該實體類中關聯其他表的那個屬性名稱;table表示關聯的表名稱;inverse屬性默認爲false表示本方維護關聯關係,如果爲true表示本方不維護關聯關係。只是影響是否能設置外鍵列的值(設成有效值或是null值),對獲取信息沒有影響。cascade屬性默認爲none,表示不級聯,可設置爲:delete,save-update,all,none 。key元素中column表示本類關聯的那個表中的外鍵列。one-to-many 中的class表示本類關聯那個實體的類型,即類名。
<set name="" table="" inverse="" cascade="">
<key column=""></key>
<one-to-many class=""/>
</set>
2、多對一:
name屬性表示本類存在的關聯的變量名;class屬性表示關聯的實體類型;column屬性表示外鍵列,引用了關聯對象的表的主鍵。
<many-to-one name="" class="" column=""></many-to-one>
3、多對多:
table屬性表示中間表,填寫表名;key子元素中的column表示集合外鍵,引用當前表主鍵的那個外鍵;many-to-many中的class表示關聯的那個實體的類型,即類名,column表示中間表引用關聯表的的主鍵。
<set name="" table="">
<key column=""></key>
<many-to-many class="" column=""></many-to-many>
</set>
4、一對一(採用獨立外鍵):
有外鍵方:與多對已關係一致,加上unique="true"表示外鍵唯一性。
<many-to-one name="" class="" column="" unique="true"></many-to-one>
無外鍵方:property-ref屬性,寫的是對方映射中外鍵列對應的類屬性名。
<one-to-one name="" class="" property-ref=""></one-to-one>
5、一對一(一方主鍵作爲外鍵):
有外鍵方:主鍵生成策略一定爲foreign,參數property生成主鍵值時所根據的對象。constrained屬性設置爲true
<id name="id" type="java.lang.Integer" column="id">
<generator class="foreign">
<param name="property"></param>
</generator>
</id>
<one-to-one ="" class="" constrained="true"></one-to-one>
無外鍵方:name表示本類中有關聯關係的屬性,class表示關聯關係的類型
<one-to-one name="" class=""></one-to-one>