應用級別所以很粗淺
首先介紹一下hibernate框架:
1.優秀的持久化(通俗講把內存上的短時間運行信息存儲在持久化硬盤上)框架。
2.作用於持久層,因為沒什么侵入性,所以同樣適用於其他層面上的存儲
3.高度整合jdbc,簡化了很多jdbc的操作。比如查詢,比如存儲
4.二級緩存。緩存一部分所查詢的數據,方便隨時調用,大大的減少了數據庫查詢。
5.ORM(Object/Rational Mapping)關系映射工具。對象關系映射把數據表的操作簡化為對於對象的操作,讓面向對象思維更加實際。
然后開始正式部署。部署之前首先調用jar包
除了以上的包還需要jdbc的所有包。這上面只是hibernate的包
(1)導入以上jar包
(2)在src下創建並編寫Hibernate主配置文件 用於初始化hibernate需要用的信息。這個文件可以放在src下,也可以放在classes下。命名為hibernate.cfg.xml
內容如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--驅動路徑注意數據庫類型 --> <property name="connection.driver_class"></property> <!--數據庫路徑 --> <property name="connection.url"></property> <!--數據庫用戶名 --> <property name="connection.username"></property> <!--數據庫密碼 --> <property name="connection.password"></property> <!--方言,便於hibernate對象操作轉化為合適的數據庫語句 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!--是否顯示sql語句,sql一般會很難看 默認為false--> <property name="hibernate.show_sql">true</property> <!--下一個層級的映射文件,用來配置bean對象與數據表之間的關系 --> <mapping resource="com/dhh/pojo/Person.hbm.xml"/> </session-factory> </hibernate-configuration>
(3)在某個目錄下創建映射文件,這就是上一步提到的Person.hbm.xml。一般跟bean放在同一個目錄下,接受hibernate.cfg.xml管理的對象與數據表的關系中間件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 注意包名。不寫的話下面要寫全限定名 --> <hibernate-mapping package="com.dhh.pojo"> <!-- 類名對應表名 --> <class name="Person" table="person"> <!-- 主鍵使用id標簽。然后對應屬性名與列名 --> <id name="id" type="int" column="id"> <!-- 自增長主鍵不同數據庫有不同類型的自增長類型,有需要可以百度到答案的 --> <generator class="identity"></generator> </id> <!-- 非主鍵映射關系,注意類型並不是單純的java類型也不是數據庫類型,而是一種中間類型,注意大小寫特別是String在這里開頭要小寫 --> <property name="name" type="string" column="name"></property> <property name="age" type="int" column="age"></property> <property name="address" type="string" column="address"></property> </class> </hibernate-mapping>
上面所說的主鍵自增長類型可參考下表
中間類型參考下表
(4)運行方式。
package com.dhh.Util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Util { public static Configuration cfg; public static SessionFactory sessionFactory; static{ //啟動原本設定好的配置管理文件 cfg=new Configuration().configure(); //建立會話工廠用來產生會話,工廠可以只有一個 sessionFactory=cfg.buildSessionFactory(); } public static Session openSesson(){ return sessionFactory.openSession(); }
public static Transaction beginTransaction(Session session){ return session.beginTransaction(); } }
下面介紹一下一上的類與接口。
1)Configuration類
Configuration 類負責讀取主配置文件的信息。包括如下內容:
Hibernate運行的底層信息:數據庫的URL、用戶名、密碼、JDBC驅動類,數據庫Dialect,數據庫連接池等(對應 hibernate.cfg.xml 文件)。
持久化類與數據表的映射關系(*.hbm.xml 文件)
加載Xml文件(hibernate.cfg.xml)創建對象方式
Configuration cfg = new Configuration().configure();
2)SessionFactory接口
Configuration對象根據當前的配置信息生成 SessionFactory 對象,因此SessionFactory 對象中保存了當前的數據庫配置信息和所有映射關系以及預定義的SQL語句。同時,SessionFactory還負責維護Hibernate的二級緩存。
獲取SessionFactory的方式:
Configuration cfg = new Configuration().configure();
SessionFactory sf = cfg.buildSessionFactory();
SessionFactory作用:是生成Session的工廠
Session session = sf.openSession();
Session接口
Session接口:是應用程序與數據庫之間交互操作的核心對象,是 Hibernate 運作的中心,所有持久化對象(javabean)必須在 session 的管理下才可以進行持久化(更新數據庫)操作。
獲取Session對象的方式:
Session session = sessionFactory.openSession();
Session的主要方法簡介:
取得持久化對象的方法: get() load()
持久化對象保存,更新和刪除:save(),update(),saveOrUpdate(),delete()
開啟事務: beginTransaction().
管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等
4)Transaction接口
代表一次數據庫訪問的最小操作,具有數據庫事務的概念。所有持久層都應該在事務管理下進行,即使是只讀操作。
獲取Transaction對象的方式:
Transaction tx =session.beginTransaction();
常用方法:
commit():提交相關聯的session實例
rollback():撤銷事務操作
wasCommitted():檢查事務是否提交
5)Query接口
Query接口 :封裝數據庫查詢的返回結果(hql的查詢方式)
獲取Query對象的方式:
Query query = session.createQuery(“hql");
常用方法
Iterator():獲取查詢結果的迭代器對象(只查詢主鍵,返回)
list():以集合的方式獲取查詢結果
(5)執行原理與流程
a、應用程序先調用Configuration類,該類讀取Hibernate配置文件及映射文件中的信息,
b、並用這些信息生成一個SessionFactory對象,
c、然后從SessionFactory對象生成一個Session對象,
d、並用Session對象生成Transaction對象;
e、可通過Session對象的get(),load(),save(),update(),delete()和saveOrUpdate()、createQuery()等方法對進行CURD等操作;
f、提交事物。