10 02Hibernate之配置文件與核心類庫詳解

在整個Hibernate編寫的過程之中會生成一些文件並且也使用到了一些新的處理類。

1 配置文件說明

在整個Hibernate裏面最爲核心的兩種配置文件:
(1)Hibernate總配置文件:hibernate.cfg.xml
(2)每一張實體表的配置文件:POJO類名稱.hbm.xml(Member.hbm.xml)。
1、Hibernate映射文件(*.hbm.xml
Hibernate是一個ORMapping映射框架,那麼所謂的ORMapping指的是對象與數據表的操作進行關聯,那麼如果當前操作的是一張member表,那麼自然簡單Java類的名稱就應該是Member,而後每一個Member類的組成一定要與數據表結構一一對應,而描述這個對應操作的就是Member.hbm.xml文件。

範例:觀察Member.hbm.xml文件的定義

<?xml version="1.0" encoding="utf-8"?>
<!-- 定義的是XML文件的文檔結構,必須按照指定的順序與名稱編寫文件 -->
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
	<!-- 定義簡單Java類的完整名稱,通過反射加載 -->
	<!-- 每一個映射文件都要求有一個與之對應的POJO類存在,此文件的作用就是描述POJO類與數據表的字段映射 -->
	<!-- name屬性描述的是POJO類,而table屬性描述的是這個類對應的數據表 -->
	<!-- catalog表示的是操作的模式名稱(數據庫名稱),一般可以省略 -->
    <class name="org.lks.pojo.Member" table="member" catalog="hedb">
    	<!-- 每一張實體表都一定會包含有一個主鍵的列,所以此處描述主鍵列 -->
    	<!-- name描述的在POJO類中的屬性名稱,type描述的是POJO類屬性的類型 -->
        <id name="mid" type="java.lang.String">
        	<!-- 此POJO類的屬性與數據表中的列的對應關係 -->
        	<!-- name表示列名稱,而length表示的是name列在表中定義的長度 -->
            <column name="mid" length="50" />
            <!-- 表示主鍵的生成方式,本處使用的是指派模式 -->
            <generator class="assigned"></generator>
        </id>
        <!-- 後面定義的都是類中的屬性以及表中的非主鍵字段的映射關係 -->
        <!-- 此處描述的是映射name類屬性以及name數據列的關係 -->
        <property name="mname" type="java.lang.String">
            <column name="mname" length="50" />
        </property>
        <property name="mage" type="java.lang.Integer">
            <column name="mage" />
        </property>
        <property name="msalary" type="java.lang.Double">
            <column name="msalary" precision="22" scale="0" />
        </property>
        <property name="mbirthday" type="java.util.Date">
            <column name="mbirthday" length="10" />
        </property>
        <property name="mnote" type="java.lang.String">
            <column name="mnote" length="65535" />
        </property>
    </class>
</hibernate-mapping>

在Hibernate中針對於主鍵的生成方式有如下幾種:
(1)主鍵由用戶自己輸入:assigned
(2)如果主鍵是由數據表自動負責增長的列,使用:native
(3)如果要想生成一個無重複的十六進制的字符串,使用uuid.hex

2、Hibernate的核心配置文件:hibernate.cfg.xml(只有一個)
(1)一個hibernate.cfg.xml文件裏面可以包含有多個*.hbm.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">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<!-- 此處表示進行Hibernate的配置操作,所有的配置通過Configuration類取得 -->
<hibernate-configuration>
	<!-- 定義Hibernate的連接工廠類,主要負責數據庫連接的取得 -->
	<session-factory>
		<!-- 此操作的主要意義在於MyEclipse配置使用,開發無用 -->
		<property name="myeclipse.connection.profile">mysql</property>
		<!-- 數據庫的連接方言,如果要修改數據庫,修改方言即可 -->
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		<!-- 數據庫的連接密碼 -->
		<property name="connection.password">19990821</property>
		<!-- 數據庫的連接用戶名 -->
		<property name="connection.username">root</property>
		<!-- 數據庫的連接地址 -->
		<property name="connection.url">
			jdbc:mysql://localhost:3306/hedb?serverTimezone=UTC
		</property>
		<!-- 數據庫的連接驅動程序 -->
		<property name="connection.driver_class">
			com.mysql.cj.jdbc.Driver
		</property>
		<!-- 配置所有的*.hbm.xml文件的路徑 -->
		<mapping resource="org/lks/pojo/Member.hbm.xml" />

	</session-factory>

</hibernate-configuration>

在實際的開發環境之中,還需要針對於hibernate.cgf.xml文件進行一些修改:
(1)設置顯示執行的SQL語句;

<property name="show_sql">true</property>

(2)格式化現實的SQL語句

<property name="format_sql">true</property>

此時會以縮進的形式顯示當前執行的SQL語句。

2 Hibernate操作類

如果從最早的版本開始Hibernate裏面只有三個核心的處理類:ConfigurationSessionFactorySession

1、去的配置文件信息:org.hibernate.cfg.Configuration
所有的數據庫的連接信息包括映射信息都保存在hibernate.cfg.xml文件裏面,而整個Hibernate如果要想執行這些程序,那麼自然需要讀取此文件,所以Configuration類的主要功能就是將所有的配置信息讀取。也就是說如果要想打開數據庫連接也需要Configuration類,那麼這個類定義有如下的方法:
(1)構造方法:public Configuration()
(2)讀取默認資源(hibernate.cfg.xml):public Configuration configure() throws HibernateException
(3)讀取指定資源:public Configuration configure(String resource) throws HibernateException

Configuration configuration = new Configuration();
configuration.configure();

在Configuration類裏面最爲重要的一個方法:
(1)創建SessionFactory:public SessionFactory buildSessionFactory() throws HibernateException
(2)創建SessionFactory:public SessionFactory buildSessionFactory(ServiceRegistry serviceRegistry) throws HibernateException
從Hibernate的4.x開始就出現了一個新的類:org.hibernate.service.ServiceRegistry,這個類的功能主要是進行服務的註冊操作,此類的操作可以忽略掉。

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();

2、數據庫的連接管理都有SessionFactory負責管理,而在SessionFactory裏面以後需要控制緩存的操作,SessionFactory可以打開新的數據庫操作——Session,方法:
(1)打開Session:public Session openSession() throws HibernateException

Session session = sessionFactory.openSession();

3、數據庫連接操作對象:org.hibernate.Session
(1)此類負責所有的數據處理操作以及事務控制;
(2)在此類裏面定義有如下的操作方法:
|————保存數據:public Serializable save(Object object),返回主鍵;
|————修改數據:public void update(Object object),問題:沒有返回結果;
|————修改數據:public void delete(Object object),問題:沒有返回結果;
|————根據ID讀取:public <T> T load(Class<T> theClass, Serializable id)
|————根據ID讀取:public <T> T get(Class<T> entityType, Serializable id)
|————【@Deprecated】創建Criteria查詢:public Criteria createCriteria(Class persistentClass)
|————創建Query查詢:public Query createQuery(String queryString)
|————創建並啓用一個事務:public Transaction beginTransaction()
|————創建事務:public Transaction getTransaction()

4、事務處理接口:org.hibernate.Transaction
所有的Hibernate操作默認都是不自動提交的,因爲自動提交本身就是一個錯誤,所以Transaction主要負責事務控制,有如下幾個控制的操作方法:
(1)事務提交,更新執行:public void commit()
(2)事務回滾:public void rollback()
(3)打開事務:public void begin(),如果使用的是beginTransaction()方法創建的事務,此操作自動執行;

這些類都是在Hibernate開發之中的重點功能類,所以必須要清楚其每一個類的作用,如果可以將核心的方法記住,因爲在整個Hibernate裏面關注的都是這幾個類。

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