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

首頁(yè) 慕課教程 Hibernate 入門教程 Hibernate 入門教程 Hibernate 初體驗(yàn)之持久化對(duì)象

Hibernate 初體驗(yàn)之持久化對(duì)象

1. 前言

本節(jié)課程讓我們一起體驗(yàn) Hibernate 的魅力!編寫第一個(gè)基于 Hibernate 的實(shí)例程序。

在本節(jié)課程中,你將學(xué)到 :

  • Hibernate 的版本發(fā)展史;
  • 持久化對(duì)象的特點(diǎn)。

為了更好地講解這個(gè)內(nèi)容,這個(gè)初體驗(yàn)案例分上下 2 個(gè)章節(jié)來(lái)講解。

2. Hibetnate 體系結(jié)構(gòu)

圖片描述

如圖可知,應(yīng)用程序可以通過(guò) Hibernate 為用戶提供的接口 API 通知 Hibernate 內(nèi)部組件對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行一系列操作。

在操作之前,先做些準(zhǔn)備工作。

3. 使用 Hibernate 編寫第一個(gè)程序

3.1 持久化對(duì)象

Hibernate 是以 Java 面向?qū)ο缶幊痰姆绞讲僮鲾?shù)據(jù)庫(kù)。使用之前先要定義一個(gè)對(duì)象,這個(gè)對(duì)象叫持久化對(duì)象。

為什么叫持久化對(duì)象?不急!一步步來(lái),慢慢掀起它神秘面紗。

先一起來(lái)看看這個(gè)持久化對(duì)象的定義。這個(gè)所謂的持久化對(duì)象長(zhǎng)得和普通的 Java 對(duì)象沒(méi)有什么不同:

文章中淡化了對(duì)象和類的區(qū)別。

public class Student {
   //學(xué)生編號(hào)
   private Integer stuId;
   //學(xué)生姓名
   private String stuName;
   //此處省略其它屬性……
   public Student(){
      super();
    }
    public Student(Integer stuId,String stuName){
     	this.stuId=stuId;
    	this.stuName=stuName;
    	//省略代碼……
    }
    //省略各種get set方法
}  

關(guān)于這個(gè)對(duì)象定義有幾點(diǎn)需要說(shuō)明:

  • 這個(gè)類的結(jié)構(gòu)需要對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)中某一張表的表結(jié)構(gòu);
  • 可用類中的屬性封裝表中對(duì)應(yīng)字段數(shù)據(jù)(數(shù)據(jù)類型保持一致);
  • 所有屬性提供 get 和 set 方法,類定義中提供一個(gè)無(wú)參的構(gòu)造方法。且不要在這個(gè)類中提供任何業(yè)務(wù)邏輯代碼。是的!這是一個(gè)符合 JavaBean 規(guī)范的普通 Java 類(POJO)。

你定義的,你心里知道。但是,Hibernate 不知道這個(gè)類是干嘛用!

所以,你必須通過(guò)元數(shù)據(jù)說(shuō)明告訴 Hibernate

  • 這個(gè)類結(jié)構(gòu)對(duì)應(yīng)那個(gè)表結(jié)構(gòu)
  • 這個(gè)類的屬性對(duì)應(yīng)表中的那個(gè)字段(還需附加類型說(shuō)明等 N 多信息)

加上元數(shù)據(jù)說(shuō)明,這樣,Hibernate 就能夠使用這個(gè)對(duì)象操作數(shù)據(jù)中的數(shù)據(jù)了!

智能化是有前提條件的!Hibernate 再聰明也需要指引!

此時(shí)這個(gè) POJO (普通 Java 類 POJO : Plain Ordinary Java Object,不包含業(yè)務(wù)邏輯代碼的值對(duì)象)對(duì)象可換上一個(gè)更貼切的名字:持久化對(duì)象(PO:persistent object)。

你也應(yīng)該要小結(jié)一下: PO = POJO + 元數(shù)據(jù)說(shuō)明

此處稍加提醒下,元數(shù)據(jù)說(shuō)明方法有兩種:

  • XML;
  • 注解。

3.2 XML 映射

現(xiàn)在流行使用注解方式告訴 Hibernate 你操作的對(duì)象對(duì)應(yīng)數(shù)據(jù)庫(kù)中的那張表及更多關(guān)聯(lián)信息。

對(duì) XML 映射大家也需要了解一下,萬(wàn)一你以后工作的企業(yè)里有一群懷舊的叔叔呢!

本章節(jié)中的案例使用 XML 映射方式,后面的內(nèi)容講解還是要跟上潮流,使用注解方式。

命名為 Student.hbm.xml 文件中部分內(nèi)容如下 (完整的文檔結(jié)構(gòu)說(shuō)明可查看官方文檔):

<Hibernate-mapping>
	<class name="com.po.Student" table="student" schema="scott" >
   	  <id  name="stuId" type="java.lang.Integer">
         <column name="stuId" precision="11" scale="0" />
         <generator class="increment"></generator>
      </id>
      <property name="stuName"  type="java.lang.String">
         <column name="stuName" length="20" unique="true" />
       </property>
       <!--其它屬性映射-->
    </class>
</Hibernate-mapping>

上面這個(gè) XML 文件中的內(nèi)容,語(yǔ)義上非常明確。為了加深理解,再解釋一下 Xml 中相應(yīng)元素:

  • class: 類與表的映射關(guān)系;
  • id: 類中的那個(gè)屬性對(duì)應(yīng)表中的主鍵字段,只能有一個(gè)。這個(gè)屬性也可叫做標(biāo)識(shí)屬性。
  • property: 通過(guò)子元素 column 一起說(shuō)明類中的其它屬性分別對(duì)應(yīng)表中的那個(gè)字段,可以有多個(gè)。

通過(guò) XML 元素屬性或子元素所提供的附加信息越多,就可以讓 Hibernate 清晰地明白自己的任務(wù),否則某些環(huán)節(jié)它就要靠猜了!

編碼規(guī)范提示: 盡可能保持 Java 類中屬性命名和表中字段命名相同!

有了前面的工作。已經(jīng)足夠讓 Hibernate 在進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)時(shí)生成正確的 SQL 語(yǔ)句,也足夠讓 Hibernate 把從數(shù)據(jù)庫(kù)中帶出來(lái)的數(shù)據(jù)映射成正確 Java 對(duì)象。

4. 主配置文件

何謂主配置文件?其作用是什么?
一句話概括:為 Hibetnater 的數(shù)據(jù)庫(kù)操作工作做行程計(jì)劃。
如:

  • 指定訪問(wèn)的具體數(shù)據(jù)庫(kù),串門可別竄岔了;
  • 操作時(shí)依賴的映射文件在那里;
  • 在操作過(guò)程其它一系列設(shè)置安排。

也可以說(shuō),開發(fā)者可以通過(guò)此文檔和 Hibernate 的內(nèi)部組件進(jìn)行互動(dòng)。 Hibetnate.cfg.xml 是主配置文件的默認(rèn)命名,當(dāng)然,你可以改成其它名稱!

好吧,現(xiàn)在通過(guò)此文件告訴 Hibernate 兩個(gè)信息:

  1. 你要遠(yuǎn)行的地方叫 MySql (本課程選用 MySql 為項(xiàng)目數(shù)據(jù)庫(kù));
  2. 你要依賴的映射文件叫 Student.hbm.xml。
<hibernate-configuration>
	<session-factory>
    	<!-- 訪問(wèn)MySql數(shù)據(jù)庫(kù)的基本連接信息 -->
    	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    	<property : name="connection.url">jdbc:mysql://localhost:3306/myhibernate</property>
    	<property name="connection.username">root</property>
    	<property name="connection.password">abc123</property>
    	<!— 數(shù)據(jù)庫(kù)連接池會(huì)在后面講解,這里先給自己一個(gè)預(yù)習(xí)機(jī)會(huì)-->
    	<property name="connection.pool_size">1</property>
    	<!-- SQL 方言 -->
    	<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
    	<!-- 是否顯示Hibetnate自動(dòng)生成的SQL語(yǔ)句 -->
    	<property name="show_sql">true</property>
    	<!—映射文件的位置-->
    	<mapping resource="com/mk/po/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

文件中的內(nèi)容一目了然,有幾點(diǎn)需要強(qiáng)調(diào)說(shuō)明:

  • 數(shù)據(jù)源的目的是告訴 Hibetnate 去哪家關(guān)系數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)。配置時(shí)一般會(huì)涉及到數(shù)據(jù)庫(kù)連接池,可先作為自己預(yù)習(xí)內(nèi)容,此章節(jié)不講;

  • dialect 方言如同大家都講普通話,因出生地區(qū)域不同,普通話中或多或少都會(huì)有本地方言。SQL 是關(guān)系數(shù)據(jù)系統(tǒng)的統(tǒng)一語(yǔ)言,每一種具體的關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品中的 SQL 語(yǔ)句也有稍許差異性。此處告訴 Hibetnate 在生成 SQL 語(yǔ)句時(shí)要入鄉(xiāng)隨俗,注意語(yǔ)法上的細(xì)節(jié)差異;

  • 其它配置內(nèi)容可根據(jù)開發(fā)過(guò)程的需求逐一添加。

其實(shí)不難,如果你覺得難,對(duì)于想讓你工作變得簡(jiǎn)單的 Hibernate 而言就會(huì)覺得很傷心!

當(dāng)然,你也不能指望 Hibetnate 是你心里的蛔蟲,在 Hibernate 工作之前與之交流環(huán)節(jié)是必不可少的。

5. 小結(jié)

本節(jié)課內(nèi)容先講到這里!知識(shí)需要消化時(shí)間。

本節(jié)課程,讓大家了解了 Hibernate 進(jìn)行數(shù)據(jù)庫(kù)操作的關(guān)鍵是什么!在心里反復(fù)地默念一下:

持久化對(duì)象是一個(gè) Java 對(duì)象牽手元數(shù)據(jù)說(shuō)明信息,目的是幫助 Hibernate 明白進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)的任務(wù)(生成增、刪、改、查相應(yīng)操作的 SQL 語(yǔ)句)、以及正確完成數(shù)據(jù)(關(guān)系型數(shù)據(jù))到數(shù)據(jù)(Java OOP 數(shù)據(jù))的映射。