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

Hibernate 初體驗之持久化對象

1. 前言

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

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

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

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

2. Hibetnate 體系結構

圖片描述

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

在操作之前,先做些準備工作。

3. 使用 Hibernate 編寫第一個程序

3.1 持久化對象

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

為什么叫持久化對象?不急!一步步來,慢慢掀起它神秘面紗。

先一起來看看這個持久化對象的定義。這個所謂的持久化對象長得和普通的 Java 對象沒有什么不同:

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

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

關于這個對象定義有幾點需要說明:

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

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

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

  • 這個類結構對應那個表結構
  • 這個類的屬性對應表中的那個字段(還需附加類型說明等 N 多信息)

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

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

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

你也應該要小結一下: PO = POJO + 元數(shù)據(jù)說明

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

  • XML;
  • 注解。

3.2 XML 映射

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

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

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

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

<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>

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

  • class: 類與表的映射關系;
  • id: 類中的那個屬性對應表中的主鍵字段,只能有一個。這個屬性也可叫做標識屬性。
  • property: 通過子元素 column 一起說明類中的其它屬性分別對應表中的那個字段,可以有多個。

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

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

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

4. 主配置文件

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

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

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

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

  1. 你要遠行的地方叫 MySql (本課程選用 MySql 為項目數(shù)據(jù)庫);
  2. 你要依賴的映射文件叫 Student.hbm.xml
<hibernate-configuration>
	<session-factory>
    	<!-- 訪問MySql數(shù)據(jù)庫的基本連接信息 -->
    	<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ù)庫連接池會在后面講解,這里先給自己一個預習機會-->
    	<property name="connection.pool_size">1</property>
    	<!-- SQL 方言 -->
    	<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
    	<!-- 是否顯示Hibetnate自動生成的SQL語句 -->
    	<property name="show_sql">true</property>
    	<!—映射文件的位置-->
    	<mapping resource="com/mk/po/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

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

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

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

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

其實不難,如果你覺得難,對于想讓你工作變得簡單的 Hibernate 而言就會覺得很傷心!

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

5. 小結

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

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

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