【Hibernate筆記整理二】配置文件

版權聲明:本文爲 小異常 原創文章,非商用自由轉載-保持署名-註明出處,謝謝!
本文網址:https://blog.csdn.net/sun8112133/article/details/106151264







通過上篇 HelloWorld 博客我們已經大致瞭解了 Hibernate 這款全自動化框架的執行流程。

本篇博客主要介紹 Hibernate 中的兩類配置文件:核心配置文件映射文件(這兩類配置文件的文件名一般要遵循相應的規範)。


一、核心配置文件

Hibernate 核心配置文件 的模板在 project\etc 目錄中。

02核心配置文件

1、Hibernate 的核心配置方式

1)方式一:屬性配置文件(hibernate.properties,不推薦使用)

hibernate.connection.driver_class=com.mysql.jdbc.Driver
...
hibernate.show_sql=true

注意: 屬性配置文件的文件名是:hibernate.properties。這種方式一般不使用,因爲它不能引入映射文件,還得手動編寫代碼來加載映射文件,過程過於繁瑣。


2)方式二:XML配置文件(hibernate.cfg.xml,推薦使用)

XML 配置文件的文件名是:hibernate.cfg.xml,我們一般推薦大家使用這種方式。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- 連接數據庫的基本參數 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///sys</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123456</property>
		<!-- 配置Hibernate的方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- 可選配置================ -->
		<!-- 打印SQL -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化SQL -->
		<property name="hibernate.format_sql">true</property>
		<!-- 自動創建表 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!-- 配置C3P0連接池 -->
		<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!--在連接池中可用的數據庫連接的最少數目 -->
		<property name="c3p0.min_size">5</property>
		<!--在連接池中所有數據庫連接的最大數目  -->
		<property name="c3p0.max_size">20</property>
		<!--設定數據庫連接的過期時間,以秒爲單位,
		如果連接池中的某個數據庫連接處於空閒狀態的時間超過了timeout時間,就會從連接池中清除 -->
		<property name="c3p0.timeout">120</property>
		 <!--每3000秒檢查所有連接池中的空閒連接 以秒爲單位-->
		<property name="c3p0.idle_test_period">3000</property>
		
		<!-- 設置事務隔離級別 -->
		<property name="hibernate.connection.isolation">4</property>
		<!-- 配置當前線程綁定的 Session -->
		<property name="hibernate.current_session_context_class">thread</property>
		
		<!-- 引入映射 -->
		<mapping resource="com/domain/Customer.hbm.xml"/>
		<mapping resource="com/domain/LinkMan.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

2、核心配置

1)必要配置

A. 連接數據庫的基本參數

  • 驅動類hibernate.connection.driver_class
  • URLhibernate.connection.url
  • 用戶名hibernate.connection.username
  • 密碼hibernate.connection.password
<!-- 連接數據庫的基本參數 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///sys</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>

B. Hibernate 方言(hibernate.dialect

Hibernate 方言 簡單的說就是設置使用的數據庫語言,這樣 Hibernate 在底層就能轉換成對應數據庫的 SQL 語言。

<!-- 配置 Hibernate 的 MySQL 方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

2)可選配置

A. 顯示 SQL(hibernate.show_sql

是否在控制檯上顯示相應的 SQL 語句。

B. 格式化 SQL(hibernate.format_sql

是否美化控制檯上的 SQL 語句。

C. 自動建表(hibernate.hbm2ddl.auto

通過此配置可以使用 Hibernate 來創建或更新數據表。其中 hbm2ddl 是指可以根據映射文件轉爲 DDL 語言(數據庫模式定義語言 ),它裏面的 2 代表 to。它有以下五個值:

  • none :默認值,不使用 Hibernate 的自動建表功能;
  • create :如果數據庫中已經有表,則刪除原有表,然後再重新創建;如果數據庫中沒有表,則新建表。此值一般測試的時候會使用;
  • create-drop :如果數據庫中已經有表,則刪除原有表,然後執行後面的語句,再刪除這個表;如果數據庫中沒有表,則新建一個表,使用完了再刪除該表。此值一般測試的時候會使用,使用此值時必須把 SessionFactory 關閉,若不關閉則會報錯;
  • update :如果數據庫中有表,就使用原有表;如果數據庫中沒有表,則創建新表;
  • validate :如果數據庫中沒有表,就不會創建表,它只會使用數據庫中原有的表,但是它使用的時候會校驗映射和表結構。

D. 配置連接池

<!-- 配置C3P0連接池 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!--在連接池中可用的數據庫連接的最少數目 -->
<property name="c3p0.min_size">5</property>
<!--在連接池中所有數據庫連接的最大數目  -->
<property name="c3p0.max_size">20</property>
<!--設定數據庫連接的過期時間,以秒爲單位,
  如果連接池中的某個數據庫連接處於空閒狀態的時間超過了timeout時間,就會從連接池中清除 -->
<property name="c3p0.timeout">120</property>
<!--每3000秒檢查所有連接池中的空閒連接 以秒爲單位-->
<property name="c3p0.idle_test_period">3000</property>

E. 事務隔離級別(hibernate.connection.isolation

事務的隔離級別有四個,它們在程序中用四個數字進行表示,它們分別是:

  • 讀未提交:Read uncommitted isolation,它用 1 表示;
  • 讀已提交:Read committed isolation,它用 2 表示;
  • 可重複讀:Repeatable read isolation,它用 4 表示;
  • 序列化:Serializable isolation,它用 8 表示。
<!-- 設置事務隔離級別 爲 可重複讀 -->
<property name="hibernate.connection.isolation">4</property>

F. 當前線程綁定的 Session(hibernate.current_session_context_class

Hibernate 中可以指定 Session 管理方式,它的可選值有:

  • thread:Session 對象的生命週期與本地線程綁定;
  • jta:Session 對象的生命週期與 JTA 事務綁定;
  • managed:Hibernate 委託程序來管理 Session 對象的生命週期。
<!-- 配置當前線程綁定的 Session -->
<property name="hibernate.current_session_context_class">thread</property>

3)引入映射文件

在配置文件中引入映射文件只能通過 XML 配置文件 的方式,如:

<mapping resource="com/demo/domain/Customer.hbm.xml" />


二、映射文件

映射文件 是將 Java 中的實體類與數據庫中的表建立映射關係的配置文件,它的文件名格式是:類名.hbm.xml。它有幾個常用標籤:

1、class 標籤

class 標籤是用來建立類與表的映射關係。它的常用屬性有:

  • name :類的全類名,如:name="com.demo.Student"
  • table :表名。如果類名和表名一致,table 屬性可以省略,如:table="s_student"
  • catelog :數據庫名。這個屬性可以不用寫,因爲在覈心配置文件中已經配置過了,如果一個項目中用到了多個數據庫,該屬性才發揮作用,如:catelog="sys"

2、id 標籤

id 標籤是用來建立類中的 id 屬性與表中主鍵字段的對應關係。它的常用屬性有:

  • name :類中的屬性名;

  • column :表中的字段名。如果類中的屬性名和表中的字段名一致,column 屬性可以省略;

  • length :字段長度。我們一般通過 Hibernate 建表時需要用到此屬性;

  • type :類型。這個屬性不需要自己去寫,Hibernate 可以自動進行轉換。此類型有三種寫法:

    • Java 類型:type="java.lang.String"

    • Hibernate 類型:type="string"

    • 數據庫類型:

      <property name="cust_name" length="32">
      	<column name="cust_name" sql-type="varchar"></column>
      </property>
      

3、property 標籤

property 標籤是用來建立類中的普通屬性與表字段的對應關係。id 標籤 與 property 標籤十分類似,相同的屬性我就不進行過多介紹了。它的常用屬性有:

  • name :類中的屬性名;
  • column :表中的字段名。如果類中的屬性名和表中的字段名一致,column 屬性可以省略;
  • length :字段長度。我們一般通過 Hibernate 建表時需要用到此屬性;
  • type :這個屬性不需要自己去寫,Hibernate 可以自動進行轉換;
  • not-null :是否允許爲空(數據表裏是非空約束)。not-null='true'
  • unique :是否唯一(數據表裏是唯一約束)。unique="true"

4、實例代碼

<!-- 建立類與表的映射 -->
<class name="com.hibernate.demo1.Customer" table="cst_customer">
	<!-- 建立類中的屬性與表中的主鍵對應 -->
	<id name="cust_id" column="cust_id">
		<!-- 主鍵都有生成策略 native: 本地策略 -->
		<generator class="native" />
	</id>
	<!-- 建立類中的普通屬性和表字段的對應 -->
	<property name="cust_name" column="cust_name" />
	<property name="cust_source" column="cust_source" />
	<property name="cust_industry" column="cust_industry" />
	<property name="cust_level" column="cust_level" />
	<property name="cust_phone" column="cust_phone" />
	<property name="cust_mobile" column="cust_mobile" />
</class>


博客中若有不恰當的地方,請您一定要告訴我。前路崎嶇,望我們可以互相幫助,並肩前行!



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