Hibernate框架學習之初識Hibernate

Hibernate框架學習之初識Hibernate

Hibernate的簡單介紹

Hibernate是一個開源的優秀的ORM(Object Relational Mapping、對象關系映射)框架,對JDBC進行了輕量級的對象封裝,架起了面向對象開發以及SQL之間的橋梁。Hibernate可以通過配置,自動生成對應的SQL語句,自動執行,并且對結果進行封裝,將得到的對象返回給用戶。有了Hibernate框架,開發人員可以以面向對象的角度來操作數據庫。

Hibernate的優點

  • 對JDBC進行封裝,簡化了數據訪問的代碼(這一點相信使用原生JDBC操作數據庫的朋友應該會有比較深的感觸)

  • 支持多種關系型數據庫

  • 性能好、配置靈活

Hibernate_HelloWorld

上面是關于Hibernate的一點簡單介紹以及其優點,接下來讓我們開始使用Hibernate的進行數據庫的訪問,感受Hibernate帶來的方便性。

準備

首先需要下載Hibernate對應的jar包,Hibernate 5.2.9 Final 版本下載地址 ,如果是使用Maven來進行構建的朋友則更加簡單了,只需要配置對應的依賴,Maven就會自動幫我們將對應的jar下載并且導入,筆者這里使用第二種方式。

建立項目

  1. 建一個Maven項目(筆者這里使用IDEA)勾選如下所示

  2. 填寫對應的GroupId、Artifact以及Version,如下所示

  3. 選擇好對應的Maven版本以及對應的設置、倉庫所在位置,如下所示

  4. 填寫項目的名稱、位置以及對應的Module信息(這里保持默認),如下所示

  5. 建立項目完成之后,項目的結構圖如下所示

  6. 為了項目資源管理的方便,這里我們在src目錄下建立一個resources目錄,并且將其設置為資源文件,這樣,Maven在編譯時會自動將其導入類路徑中,具體操作如下

    至此,我們的項目的基本骨架的搭建完成了。

導入Hibernate的核心包以及依賴包

由于是使用Maven來進行項目管理,所以導入對應的jar文件只需要在根目錄的pom.xml文件中添加如下內容即可

<project>
  ...
    <dependencies>
    <!--添加Junit支持-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--添加Hibernate支持-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.2.9.Final</version>
    </dependency>
    <!--添加JDBC支持-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.41</version>
    </dependency>
  </dependencies>

  <build>
    <!--為了IDEA能夠在編譯時將對應的配置文件加入,需要添加下面的配置-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
    </resources>
  </build>
  ...
</project>

這樣Maven就會自動下載Hibernate所需要的依賴及其核心包了。

編寫配置文件

Hibernate的配置主要有兩個文件,一個是用于配置元數據的,一個是用于配置數據源等信息的,下面我們開始編寫配置文件

元數據

首先閑來編寫元數據配置文件,所謂的元數據配置文件,可以理解為就是一個對應關系,也就是配置一個從JavaBean對象到SQL之間的對應關系,顯然,為了Hibernate能夠自動地完成從Java對象到SQL之間的映射,我們就必須告訴它哪個對象對應哪一張表,其中對象中的哪個屬性對應表中的哪個列,哪個屬性是對應的ID。

也就是說,在這個環節中,需要建立兩個內容,一個是所要操作的類,另外一個其對應的關系,也就是我們的元數據

  1. 在包中建立以個Students對象,如下所示

    package cn.xuhuanfeng.learnignhibernate;
    
    /**
     * Created by xuhuanfeng on 2017-04-06.
     */
    public class Students{
    
        private int id;
        private String name;
        private int age;
     . . . 
     // 篇幅原因省略setter以及getter
    }
    

    ?

  2. 在Students對象的同級目錄建立一個名為Student.hbm.xml的配置文件,配置內容如下所示

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <!--name為對應的Java類,table為對應的表的名字-->
        <class name="cn.xuhuanfeng.learnignhibernate.Students" table="students">
            <!--id為對應的主鍵,name為類屬性,column為表的字段-->
            <id name="id" column="id">
                <!--主鍵的增長策略,以后將介紹-->
                <generator class="increment"></generator>
            </id>
            <!--property為其他的屬性-->
            <property name="name" column="name"></property>
            <property name="age" column="age"></property>
        </class>
    </hibernate-mapping>
    
    

    至此,我們的元數據則建立完成。

    數據源配置文件

    接下來嗎,我們來編寫Hibernate的數據源配置文件,該配置文件是Hibernate的核心配置文件,主要用于加載上面的元數據以及配置相關的屬性等等,在剛剛建立的resources目錄中建立名為hibernate.cfg.xml的文件,注意,該文件不建議更改名字,內容如下所示:

    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <!--配置數據源信息-->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">huanfeng</property>
    
            <!--打印操作過程中的SQL語句-->
            <property name="show_sql">true</property>
            <!--格式化SQL語句-->
            <property name="format_sql">true</property>
    
            <!--配置數據庫操作策略,以后將介紹-->
            <property name="hbm2ddl.auto">update</property>
    
            <!--配置對應的映射文件 即 元數據-->
            <mapping resource="cn/xuhuanfeng/learnignhibernate/Student.hbm.xml"></mapping>
        </session-factory>
    
    </hibernate-configuration>
    

    由于這里需要操作對應的數據庫,所以還需要建立一個對應的庫,這里命名為hibernate,如果按照上面的配置,則不需要建立對應的表,只需要建立對應的庫即可。

    至此,Hibernate所需要的配置全部完成,接下來我們就來開始編寫對應的測試代碼了。

編寫測試文件

不知道初學Hibernate的你,看到這里會不會有點懵,筆者剛剛學習的時候也覺得有點懵,這樣就可以編寫測試代碼了?我連具體內容都還沒見到了,就只是寫了配置文件以及一個JavaBean而已。這就是Hibernate的強大之處了,我們基本上可以不需要寫任何的JDBC代碼就能操作數據庫了,而且更神奇的事情還在繼續,讓我們接下來繼續前進,編寫對應的測試類 StudentsTest如下所示

/**
 * Created by xuhuanfeng on 2017-04-06.
 * 測試Hibernate
 */
public class StudentsTest {

    @Test
    public void testCreate(){
        // 獲取Hibernate的配置對象
        Configuration configuration = new Configuration().configure();
        // 建立SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 打開session
        Session session = sessionFactory.openSession();

        // 所要添加到數據庫的學生對象
        Students students = new Students();
        students.setAge(22);
        students.setName("xuhuanfeng");

        // 開啟事務
        Transaction ts = session.beginTransaction();
        // 將數據添加到數據庫
        session.save(students);
        // 提交事務
        ts.commit();

        // 關閉對應的連接
        session.close();
        sessionFactory.close();
    }
}

保存之后直接運行即可,然后就可以查看對應的數據庫數據了,相信你會驚奇的發現,對應的數據已經保存到數據庫中了: )

控制臺輸出

細心的你可能會發現,在IDEA控制臺中,輸出了很多內容,接下來我們來粗略地看一下這些內容,在輸出的內容中,主要內容如下

Hibernate: 
    
    create table students (
       id integer not null,
        name varchar(255),
        age integer,
        primary key (id)
    ) engine=MyISAM
Hibernate: 
    select
        max(id) 
    from
        students
Hibernate: 
    insert 
    into
        students
        (name, age, id) 
    values
        (?, ?, ?)

相信看到上面這些內容的你會覺得非常熟悉,這些SQL語句就是Hibernate為我們生成的,也就是說,使用了Hibernate框架,我們基本上再也不需要編寫這些SQL操作的語句了,因為Hibernate已經為我們做好了大部分重復性的操作了。

總結

這小節主要介紹了Hibernate以及Hibernate的優點,并且一步步動手搭建一個基于Maven的Hibernate的項目,編寫對應的配置文件以及測試類,看到了Hibernate的神奇之處,不過Hibernate的神奇之處可不止這些,Hibernate的學習之路還在繼續。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容

  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,889評論 6 342
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • 本文包括: 1、CRM 項目的整體介紹 2、Hibernate 框架概述 3、Hibernate 快速入門 4、H...
    廖少少閱讀 3,480評論 9 66
  • 本文中我們介紹并比較兩種最流行的開源持久框架:iBATIS和Hibernate,我們還會討論到Java Persi...
    大同若魚閱讀 4,320評論 4 27
  • 不見城市的夜,不算真正來過。在夜里,風聲是城市的鼻息,燈火是城市的眼睛。夜晚彰顯城市真實的秉性,喧囂、沉靜、繁華或...
    杜痕遠閱讀 700評論 1 1