天天看點

hibernate jar包_Hibernate【入門篇】

1. Hibernate 概述

1.1. Hibernate 是什麼

百度百科:

Hibernate是一個開放源代碼的 對象關系映射 架構,它對JDBC進行了非常輕量級的 對象封裝 ,它将 POJO 資料庫表 建立映射關系,是一個 全自動的orm架構 ,hibernate可以 自動生成SQL語句

,自動執行,使得Java程式員可以随心所欲的使用對象程式設計思維來操縱資料庫。

Hibernate可以應用在任何使用JDBC的場合,既可以在Java的用戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的JaveEE架構中取代CMP,完成資料持久化的重任。

總結:

Hibernate是一個基于ORM的持久層架構,使用POJO來操作資料庫。

1.2. ORM 是什麼

百度百科:

對象關系映射(Object Relational Mapping,簡稱ORM)是通過使用描述對象和資料庫之間映射的中繼資料,将面向對象語言程式中的對象自動持久化到關系資料庫中。本質上就是 将資料從一種形式轉換到另外一種形式 。這也同時暗示着額外的執行開銷;然而,如果ORM作為一種中間件實作,則會有很多機會做優化,而這些在手寫的持久層并不存在。更重要的是用于控制轉換的中繼資料需要提供和管理;但是同樣,這些花費要比維護手寫的方案要少;而且就算是遵守ODMG規範的對象資料庫依然需要類級别的中繼資料。

總結:

ORM是Object Relational Mapping的縮寫,ORM就是在操作資料庫之前,先将實體類與資料庫表的關系建立起來, 通過操作實體類的對象來操作資料庫

1.3. ORM 的作用是什麼

ORM是一套基于對象操作資料庫的理念(規範),其主要作用就是為了實作不用寫SQL語句,通過對象操作資料庫。

1.4. Hibernate 的作用是什麼

既然Hibernate是一個基于ORM理念實作的持久層架構。那麼它的作用就是,為了實作使用對象操作資料庫。

1.5. Hibernate 的應用場景是什麼

[1] 在所有使用JDBC的場景都可以使用Hibernate。

[2] 編寫一套相容多種資料庫的持久層代碼。我們知道各種資料庫的SQL語言和SQL标準是有差異的,而Hibernate實作了各種主流資料庫的方言,隻要開發人員嚴格根據Hibernate規範編寫代碼,可以實作編寫一套代碼,相容多種資料庫。

總結:

在一些需要支援多種資料庫的産品型項目,使用Hibernate可以減少持久層的代碼的編寫。

2. Hibernate 入門

2.1. 配置流程圖

通過架構的配置流程圖,可以快速了解架構的必須要素。如下:

hibernate jar包_Hibernate【入門篇】
問題1:為什麼需要一個配置檔案?
答:因為需要一個配置檔案,來存儲Hibernate架構的架構資訊。如果沒有配置檔案隻能将這些資訊寫在類裡面。配置資訊寫在類裡面,編譯後就不能修改了,靈活性差。
問題2:為什麼需要一個映射檔案?
答:因為Hibernate是一個ORM架構,是以需要先建立實體類與表的關系後,然後才可以通過實體類的對象操作資料庫。是以必須要有建立關系的映射檔案。

2.2. 配置步驟

根據以上配置流程圖。我們可以得出配置步驟為:

1. 導入依賴

2. 建立一個配置檔案

3. 建立一個獲得操作對象(Session)的工具類

4. 建立表的實體類

5. 建立映射關系檔案

6. 加載映射檔案

7. 實體操作(插入資料)

2.3. Hibernate壓縮檔案說明

上Hibernate官網下載下傳Hibernate壓縮包,壓縮包内容如下。

hibernate jar包_Hibernate【入門篇】

3. 入門示例

3.1. 需求

使用Hibernate架構,插入一條資料到學生表裡面。

3.2. 準備:資料庫腳本

CREATE TABLE `tb_student` (
`student_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '學生編号',
`student_name` VARCHAR(50) NOT NULL COMMENT '學生名',
`student_pwd` VARCHAR(50) NOT NULL COMMENT '密碼',
`student_status` INT(11) NOT NULL COMMENT '學生狀态',
`create_date` DATETIME NOT NULL COMMENT '建立日期',
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB;
           

3.3. 配置步驟

第一步:建立項目導入包

方式一:導入jar包

建立一個普通java項目,将Hibernate的zip壓縮包的lib/required所有jar包加入到項目,以及mysql驅動包。

hibernate jar包_Hibernate【入門篇】
方式二:導入Maven依賴(推薦方式)

建立一個Maven項目,在POM檔案中添加以下依賴。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-agroal</artifactId>
    <version>5.3.15.Final</version>
</dependency>
           

第二步:建立配置檔案

注意事項:隻要提供XML的架構,是必須提供DTD或者Schema規則檔案的。我們需要在IDEA中添加Hibernate子產品,讓開發工具可以生産XML的頭資訊,以及對XML有提示。

添加過程如下:

hibernate jar包_Hibernate【入門篇】
hibernate jar包_Hibernate【入門篇】
hibernate jar包_Hibernate【入門篇】
--hibernate.cfg.xml配置檔案内容如下:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <!-- 指定會話工廠 -->
  <session-factory>
    <!--
      指定DB連接配接四要素
      注意:任何架構的配置參數,都可以在源代碼中找到對應的代碼
    -->
    <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?serverTimezone=UTC</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>

    <!-- 指定顯示SQL -->
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>

    <!-- 配置加載的映射檔案 -->
    <mapping resource="hbm/student.hbm.xml" />
    
  </session-factory>
</hibernate-configuration>
           

第三步:建立HibernateUtils工具類

public 
           

第四步:建立實體類

public 
           

第五步:建立映射檔案

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="org.brick.pojo.Student" table="tb_student">
        <!--
          指定主鍵對應關系
          問題:為什麼Id字段需要特别設定?
          答:由于不同資料庫的ID生成政策是有差異的,所有我們需要手工指定資料庫的ID生成政策
         -->
        <id name="studentId" column="student_id">
            <!--
              identity:使用内置的自增長政策
             -->
            <generator class="identity"/>
        </id>

        <!--
          指定普通屬性的對應關系
         -->
        <property name="studentName" column="student_name"/>
        <property name="studentPwd" column="student_pwd"/>
        <property name="studentStatus" column="student_status"/>
        <property name="createDate" column="create_date"/>
    </class>
</hibernate-mapping>
           

第六步:測試插入

@Test
           

通過入門示例,Hibernate果然不用編寫SQL語句,通過實體類對象就可以操作資料庫,驗證了Hibernate是一個全自動的ORM架構。

4. Hibernate主鍵政策

hibernate jar包_Hibernate【入門篇】

5. HQL入門

5.1. HQL 是什麼

HQL是Hibernate Query Language的縮寫,提供更加豐富靈活、更為強大的查詢能力,HQL非常接近SQL語句查詢文法。
問題:Hibernate不是号稱不寫一句SQL來操作資料庫的嗎?為什麼Hibernate還提供HQL供我們使用?
Hibernate在需求不怎麼多變的情況,開發效率确實很高,因為SQL語句都交給了架構完成,而應對需求多變的網際網路項目來說,Hibernate就顯得力不從心,因為開發人員根本觸碰不到SQL,因而優化SQL那更是紙上談兵,面對這種問題,Hibernate就提供了HQL給開發人員自行編寫SQL操作資料庫。

5.2. 需求

在入門示例的基礎上修改StudentDAO類,使用HQL操作資料庫。

5.3. 查詢所有資料

@Test
           

5.4. 統計記錄

@Test
           

5.5. 模糊查詢

@Test
           

5.6. 條件删除

@Test
           

5.7. 條件 更新

@Test
           

繼續閱讀