第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Hibernate 使用初體驗(yàn)之操作流程

1. 前言

Hibernate 神奇之處在于只需要簡(jiǎn)簡(jiǎn)單單的幾行代碼,就能完成原生 JDBC 中復(fù)雜的操作。

本節(jié)課程的主要知識(shí)點(diǎn):

  • 初步認(rèn)識(shí)、了解 Hibernate 核心組件各自的基礎(chǔ)功能;
  • 編寫 Hibernate 程序的流程。

2. Hibernate 核心組件

獨(dú)木難成林,一個(gè)好漢三個(gè)幫!

開(kāi)發(fā)者的應(yīng)用程序依賴 Hibernate 完成數(shù)據(jù)庫(kù)中數(shù)據(jù)操作任務(wù)時(shí),Hibernate 又會(huì)依靠它體系內(nèi)的多個(gè)組件一起協(xié)同完成任務(wù)。

如下圖展示了 Hibernate 的核心組件庫(kù)中部分組件之間的依賴關(guān)系。

圖片描述

開(kāi)發(fā)者需要使用 Hibernate 暴露給開(kāi)發(fā)者的組件 API 進(jìn)行對(duì)接開(kāi)發(fā),先看看分別都有誰(shuí):

  • Configuration;
  • ServiceRegistry;
  • SessionFactory;
  • Session;
  • Transaction。

這幾大組件各有來(lái)頭,想要完全駕馭,則需了解其秉性和功能,后面章節(jié)會(huì)一一展開(kāi)討論。此處只需要了解這幾大組件在構(gòu)建一個(gè)完整的操作流程時(shí)各自的核心作用及出現(xiàn)順序。

如下圖示:

簡(jiǎn)述一下流程:

  • 通過(guò) Configuration 對(duì)象讀取主配置文件,故需為此對(duì)象指定主配置文件的位置,如不指定,由從默認(rèn)位置即編譯后的主目錄(classesbin)中讀取;

  • 配置對(duì)象在擁有了數(shù)據(jù)庫(kù)連接配置信息后便可以創(chuàng)建 SessionFactory 對(duì)象。此組件可認(rèn)為是應(yīng)用程序中對(duì)某一個(gè)具體關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)的抽象引用。透明地認(rèn)為它就是數(shù)據(jù)庫(kù)的鏡像;

  • SessionFactory 對(duì)象創(chuàng)建出可以直接操作數(shù)據(jù)庫(kù)的會(huì)話對(duì)象(Session)。Session 對(duì)象相當(dāng)于原生 Jdbc 中的 Connection 對(duì)象,但比其具有更豐富的實(shí)際操作功能,Session 對(duì)象也叫做持久化容器。應(yīng)用程序主要使用此對(duì)象進(jìn)行一系列具體的數(shù)據(jù)操作,有它便可“掃貨”數(shù)據(jù)庫(kù)中的數(shù)據(jù);

  • Transaction 在具體操作中起事務(wù)監(jiān)控作用,負(fù)責(zé)及時(shí)提交,及時(shí)剎車回滾。

認(rèn)識(shí)了 Hibernate 中的這群肝膽相照的好兄弟,了解了他們的各自職責(zé),它們通過(guò)分工合作的方式把應(yīng)用程序的意圖向 Hibernate 內(nèi)部組件逐層傳達(dá)?,F(xiàn)在是著手編寫一個(gè)完整代碼的時(shí)候了,有了結(jié)果的過(guò)程更能感受到 Hibernate 的魅力。

Hibernate 4.x 之后的版本中多了一個(gè) ServiceRegistry組件,此組件到后面章節(jié)論述。

3. 編寫 Hibernate 程序

本文程序開(kāi)發(fā)環(huán)境說(shuō)明:

  • 操作系統(tǒng): windows 7 以上;
  • 開(kāi)發(fā)工具: Eclipse 。

此方案可作為學(xué)習(xí)者的可選擇方案之一,有興趣可了解其它系統(tǒng)或開(kāi)發(fā)工具!

3.1 程序開(kāi)發(fā)流程

新建一個(gè) Java Project 項(xiàng)目,想必此處不需要更多累贅說(shuō)明。

程序中需要使用 Hibernate 組件所提供的功能,因此程序中需要加入 Hibernate 的各組件所在的 Jar 包。

依賴包的加入方式有 2 種:

  • 使用 Maven 的依賴管理功能自動(dòng)加入,需要 Maven 相關(guān)知識(shí),此文不介紹,需要了解可自行查閱相關(guān)資料;
  • 手工方式加入,辛苦著并快樂(lè)著。

本課程采用第 2 方式,手工加入:

  • 下載: Hibernate-release-4.2.0.Final.zip;

小插曲:為什么選擇 4.x 版本?

企業(yè)只會(huì)選擇市場(chǎng)上運(yùn)行時(shí)間較久、穩(wěn)定性經(jīng)過(guò)時(shí)間檢驗(yàn)的版本,4.x 版本已經(jīng)出現(xiàn)一些時(shí)間,稱得上較穩(wěn)定版本,將來(lái)進(jìn)入企業(yè)可直接上手。
高版本封裝度高,從應(yīng)用角度講,只會(huì)更簡(jiǎn)單,從學(xué)習(xí)角度講,不便于了解更多過(guò)往操作細(xì)節(jié)。
官網(wǎng):http://hibernate.org/

  • 解壓: 找到解壓后 Hibernate 目錄下的 lib 子目錄,從其中選擇程序需要的基礎(chǔ)包。切記別忘記加入 MySql Jdbc 驅(qū)動(dòng)包(本文使用 MySql 相關(guān)的 Jdbc 驅(qū)動(dòng)包)

圖片描述

友情提示時(shí)間:

  • Student.java 文件和 Student.hbm.xml 最好放在一起,不放在一起問(wèn)題也不大。但兩個(gè)文件構(gòu)成了邏輯上持久化對(duì)象描述,既然是手足兄弟放在一起可加深情感上的聯(lián)系。
  • 把 Hibernate.cfg.xml 放在src下,運(yùn)行時(shí)會(huì)編譯到 classesbin 目錄下,此處為加載主配置文件的默認(rèn)位置。

思考時(shí)間:Hibernate.cfg.xml 不放在 src 下可不可以?

用 Java 語(yǔ)言復(fù)述一下上面的中文描述流程

// 配置對(duì)象
Configuration configuration = new Configuration().configure();
// 服務(wù)注冊(cè)
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
// 會(huì)話工廠
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);		
// 會(huì)話對(duì)象
Session session = sessionFactory.openSession();
// 事務(wù)對(duì)象
Transaction transaction = null;
try {
     // 啟用事務(wù)
    transaction = session.beginTransaction();
    //各種增、刪、改、查…… 操作
  
    transaction.commit();
} catch (Exception e) {
    transaction.rollback();
} finally {
    session.close();
}

一定要細(xì)心觀察啦!發(fā)現(xiàn)沒(méi)有!使用Hibernate對(duì)數(shù)據(jù)庫(kù)進(jìn)行一系列操作也是一個(gè)模板化流程。

友情提示時(shí)間:

  • 不使用 ServiceRegistry 對(duì)象,configuration.buildSessionFactory() 形式也可以創(chuàng)建會(huì)話工廠?。?strong>官方文檔就這么創(chuàng)建的);
  • 如果使用 ServiceRegistry,則需要注意上面的語(yǔ)法使用要點(diǎn)!否則有可能會(huì)出現(xiàn)配置信息讀不到,會(huì)話工廠創(chuàng)建不成功的情況;
  • 最后不要忘記關(guān)閉會(huì)話對(duì)象(Session)。

3.2 插入一條數(shù)據(jù)試試

在進(jìn)行數(shù)據(jù)庫(kù)中對(duì)應(yīng)表中數(shù)據(jù)的 CRUD 之前,需要保證數(shù)據(jù)庫(kù)中有對(duì)應(yīng)的表結(jié)構(gòu)。

Hibernate 為了讓我們更專心于測(cè)試、了解操作流程及規(guī)范,避免開(kāi)發(fā)者因切換不同的工作環(huán)境而影響思維慣性,提供了一個(gè)很好玩的功能!

利用 PO 對(duì)象信息自動(dòng)在數(shù)據(jù)庫(kù)系統(tǒng)中生成和 PO 對(duì)象類結(jié)構(gòu)相似的表結(jié)構(gòu),是不是酷得不要不要的。大家一起來(lái)膜拜下!

要使用此功能,則只需要在 Hibernate.cfg.xml 主配置文件中添加如下一行

<property name="hbm2ddl.auto">create</property>

好!開(kāi)始向 MySqlmystus 數(shù)據(jù)庫(kù)中的 student 表中插入一條數(shù)據(jù)吧。

切記,此時(shí)數(shù)據(jù)庫(kù)中還沒(méi)有 student 表,更談不上有數(shù)據(jù)。但是!奇跡馬上就要發(fā)生。

// 配置對(duì)象
Configuration configuration = new Configuration().configure();
// 服務(wù)注冊(cè)
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
// 會(huì)話工廠
SessionFactory sessionFactory =configuration.buildSessionFactory(serviceRegistry);
// 會(huì)話對(duì)象
Session session = sessionFactory.openSession();
// 事務(wù)對(duì)象
Transaction transaction = null;
try {
    // 打開(kāi)事務(wù)
	transaction = session.beginTransaction();
    //添加一條學(xué)生信息
	Student student=new Student(1, "hibernate01","男");
	session.save(student);
	transaction.commit();
} catch (Exception e) {
	transaction.rollback();
} finally {		
	session.close();
}

運(yùn)行上述代碼,再利用可視化工具進(jìn)入 MySql 系統(tǒng)中查看一下,則會(huì)看到上面代碼所產(chǎn)生的結(jié)果!

圖片描述

表和數(shù)據(jù)都已經(jīng)存在了,是不是一件令人開(kāi)心的事情呢!

高興之余可別忘記下面的建議!

  • 如果希望保留每一次添加的數(shù)據(jù),則除了第一次 hbm2ddl.auto 屬性的值為 create 外,后繼需要改成 updatevalidate;

create 只要加載配置文件便會(huì)刪除表,再創(chuàng)建表,周而復(fù)始!
updatevalidate 只有當(dāng) PO 對(duì)象類結(jié)構(gòu)修改后才會(huì)觸發(fā)表結(jié)構(gòu)的變化

  • 建議 hbm2ddl.auto 的功能只用于學(xué)習(xí) Hibernate 的過(guò)程中,數(shù)據(jù)庫(kù)設(shè)計(jì)由專業(yè)數(shù)據(jù)庫(kù)需求設(shè)計(jì)師考慮為好。

4. 小結(jié)

本章節(jié)內(nèi)容就要結(jié)束了,但學(xué)習(xí)之路才剛剛開(kāi)始。

本章節(jié)認(rèn)識(shí)了 Hibernate 的核心組件,并了解了 Hibernate 的具體操作流程。并把一條數(shù)據(jù)從應(yīng)用程序中插入到了 MySql 中的表中。感受 Hibernate 神奇之時(shí),更需要思考 Hibernate 又是如何做到的。

另外,本節(jié)內(nèi)容雖然選擇的是 MySql 數(shù)據(jù)庫(kù),但并不意味著你不可以選擇其它數(shù)據(jù)庫(kù)。

路漫漫其修遠(yuǎn)兮,吾將上下而求索,下節(jié)課程一起繼續(xù)相逢在Hibernate 的江湖!