1. 程式人生 > >二、Hibernate配置檔案

二、Hibernate配置檔案

配置檔案之對映檔案

對映檔案通常儲存在和實體bean的同一個包下,命名格式建議為:類名.hbm.xml,例如Customer.hbm.xml。

<hibernate-mapping>標籤:根節點
<class>標籤: 用來將類與資料庫表建立對映關係,包含以下屬性

  • name:類的全路徑
  • table :表名,(類名與表名一致,那麼table屬性也可以省略)
  • catalog:資料庫的名稱,基本上都會省略不寫

<id>標籤: 用來將類中的屬性與表中的主鍵建立對映,id標籤就是用來配置主鍵的,包含以下屬性:

  • name
    :類中的屬性名
  • column :表中的欄位名.(如果類中的屬性名與表中的欄位名一致,那麼column可以省略.)
  • length:欄位的程度,如果資料庫已經建立好了,那麼length可以不寫。如果沒有建立好,生成表結構時,length最好指定。

<generator>標籤:主鍵的生成策略,一共有6種:

  • increment:適用於short,int,long作為主鍵.不是使用的資料庫自動增長機制.
    Hibernate中提供的一種增長機制,即
    先進行查詢 :select max(id) from user; 再進行插入:獲得最大值+1作為新的記錄的主鍵.
    問題:不能在叢集環境下或者有併發訪問的情況下使用.

  • identity:適用於short,int,long作為主鍵。但是這個必須使用在有自動增長資料庫中(如mysql).採用的是資料庫底層的自動增長機制.
    底層使用的是資料庫的自動增長(auto_increment).而Oracle資料庫是沒有自動增長則不能採用這種策略了.

  • sequence:適用於short,int,long作為主鍵.底層使用的是序列的增長方式.
    Oracle資料庫底層沒有自動增長,想自動增長需要使用序列.

  • uuid:適用於char,varchar型別的作為主鍵.
    使用隨機的字串作為主鍵.

  • native:本地策略.根據底層的資料庫不同,自動選擇適用於該種資料庫的生成策略.(short,int,long)

    • 如果底層使用的MySQL資料庫:相當於identity.
    • 如果底層使用Oracle資料庫:相當於sequence.
  • assigned:主鍵的生成不用Hibernate管理了.必須手動設定主鍵.

在上面6種策略當中,只有native和uuid策略是最常用的

<property>標籤: 用來將類中的普通屬性與表中的欄位建立對映,包含以下屬性:

  • name: 類中的其他屬性名
  • column:表中的欄位名.(如果類中的屬性名與表中的欄位名一致,那麼column可以省略.)
  • length:資料長度
  • type:資料型別(一般都不需要編寫,如果寫需要按著規則來編寫)
    • Hibernate的資料型別 type=“string”
    • Java的資料型別 type=“java.lang.String”
    • 資料庫欄位的資料型別新增子節點<column name="name" sql-type="varchar"/>

下面是一個完整的對映檔案的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<!-- 配置類名和表名的對映 -->
	<class name="blog.csdn.net.mchenys.domain.Customer" table="cst_customer">
		
		<!-- 配置類屬性和表結構欄位的對映
			 name屬性:JavaBean的屬性 
			 column屬性:表結構的欄位 
		-->
	
		<!--配置主鍵屬性  -->
		<id name="cust_id" column="cust_id">
			<!-- 主鍵的生成策略 native表示由hibernate維護-->
			<generator class="native" />
		</id>

		<!-- 配置其他的屬性 -->
		<property name="cust_name" column="cust_name" />
		<property name="cust_user_id" column="cust_user_id" />
		<property name="cust_create_id" column="cust_create_id" />
		<property name="cust_source" column="cust_source" />
		<property name="cust_industry" column="cust_industry" />
		<property name="cust_level" column="cust_level" />
		<property name="cust_linkman" column="cust_linkman" />
		<property name="cust_phone" column="cust_phone" />
		<property name="cust_mobile" column="cust_mobile" />

	</class>
</hibernate-mapping>

配置檔案之核心檔案

核心配置檔案必須放在web專案的src目錄下,命名格式必須是hibernate.cfg.xml
<hibernate-configuration>標籤:根節點
<session-factory>標籤:指定會話工廠,用於建立session用的,一個數據庫對應一個SessionFactory標籤。
<property>標籤:用於設定各種屬性
<mapping>標籤:用於指定對映配置檔案的路徑,hibernate只有通過這裡配置的路徑才能找到javabean和資料庫表的對應關係,也就是Xxx.hbm.xml檔案。

5大必要屬性包括:
設定資料庫連線資訊(佔4個):

  • hibernate.connection.driver_class – 連線資料庫驅動程式
  • hibernate.connection.url – 連線資料庫URL
  • hibernate.connection.username – 資料庫使用者名稱
  • hibernate.connection.password – 資料庫密碼

設定方言(1個)

  • hibernate.dialect – 操作資料庫方言

可選的配置

  • hibernate.show_sql – 顯示SQL
  • hibernate.format_sql – 格式化SQL
  • hibernate.hbm2ddl.auto – 通過對映轉成DDL語句
    • create – 每次都會建立一個新的表,沒什麼意義。
    • create-drop – 每次都會建立一個新的表,當執行結束之後,將建立的這個表刪除,沒什麼意義。
    • update – 如果有表,使用原來的表.沒有表,建立一個新的表.同時支援新增欄位,當不支援刪除欄位,通常使用這個。
    • validate – 如果有表,使用原來的表.同時校驗對映檔案與表中欄位是否一致如果不一致就會報錯.

上面提到的這些屬性其實都可以在hibernate下載的包裡面找到,具體路徑是在hibernate解壓根目錄\project\etc\hibernate.properties

下面是一個完整核心配置檔案的配置

<?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>

	<!-- 記住:先配置SessionFactory標籤,一個數據庫對應一個SessionFactory標籤 -->
	<session-factory>

		<!-- 必須要配置的引數有5個,4大引數,資料庫的方言 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">1234</property>

		<!-- 資料庫的方言 -->
		<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>
		<!-- 生成資料庫的表結構 
			update:如果沒有表結構,建立表結構。如果存在,不會建立,可動態新增欄位(新增屬性和對映即可),不能刪除欄位
		-->
		<property name="hibernate.hbm2ddl.auto">update</property>

		<!-- 對映配置檔案,需要引入對映的配置檔案 -->
		<mapping resource="blog/csdn/net/mchenys/domain/Customer.hbm.xml" />

	</session-factory>

</hibernate-configuration>