二、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>