1. 程式人生 > >hibernate簡單入門教程(一)---------基本配置

hibernate簡單入門教程(一)---------基本配置

應用級別所以很粗淺

首先介紹一下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、提交事物。