在整個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裏面只有三個核心的處理類:Configuration
、SessionFactory
、Session
。
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裏面關注的都是這幾個類。