<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Hiberate 教程 > 原文: [https://howtodoinjava.com/hibernate-tutorials/](https://howtodoinjava.com/hibernate-tutorials/) Hibernate 是一個開源的 **Java 持久化**框架項目。 它使用 HQL 和 SQL 執行功能強大的對象關系映射和查詢數據庫。 Hibernate 是 Java 中 **ORM 映射**的出色工具。 它可以減少很多復雜性,從而減少應用中的缺陷,否則它們可能會找到存在的方法。 對于那些對 SQL 知識了解有限的開發人員來說,這特別有利。 Hibernate 最初是從 ORM 框架開始的,它已經分解為許多項目,例如 *Hibernate Search*,*Hibernate Validator*,*Hibernate OGM*(用于 NoSQL 數據庫),以此類推。 ## Hiberate 架構 下圖總結了 Hiberate 架構中的主要構建塊。 ![Hibernate Architecture](https://img.kancloud.cn/15/91/15912e9143e172af9a68beda76c08758_548x470.png) Hiberate 架構 讓我們了解每個方塊代表什么。 1. **配置**:通常以`hibernate.properties`或`hibernate.cfg.xml`文件編寫。 對于 Java 配置,您可能會發現帶有`@Configuration`注解的類。 會話工廠使用它與 Java 應用和數據庫一起使用。 它代表了應用 Java 類型到 SQL 數據庫的完整映射集。 2. **會話工廠**:任何用戶應用都向會話工廠請求會話對象。 會話工廠使用上面列出的文件中的配置信息來適當地實例化會話對象。 3. **會話**:這表示應用和數據庫在任何時間點之間的交互。 這由`org.hibernate.Session`類表示。 可以從`SessionFactory` bean 中檢索會話的實例。 4. **查詢**:它允許應用在數據庫中查詢一個或多個存儲的對象。 Hibernate 提供了多種查詢數據庫的技術,包括`NamedQuery`和`Criteria API`。 5. **一級緩存**:它表示 Hibernate 會話對象與數據庫交互時使用的默認緩存。 它也稱為會話緩存,它在當前會話中緩存對象。 從會話對象到數據庫的所有請求都必須通過一級緩存或會話緩存。 必須注意,會話對象處于活動狀態之前,會話對象可以使用第一級緩存。 6. **事務**:使您能夠實現數據一致性,并在出現意外情況時回滾。 7. **持久化對象**:這些是普通的舊 Java 對象(PO??JO),它們通過 Hiberate 被持久化為數據庫相關表中的行之一。它們可以在配置文件中配置(`hibernate.cfg.xml`或`hibernate.properties`)或使用`@Entity`注解進行注解。 8. **二級緩存**:用于跨會話存儲對象。 需要明確啟用此功能,并且需要為第二級緩存提供緩存供應器。 常見的二級緩存供應器之一是 *EhCache*。 ## Hibernate 框架的主要功能 * #### 對象/關系映射 作為 ORM 框架,Hibernate 允許 Java 域對象與數據庫表的映射,反之亦然。 結果,業務邏輯能夠通過 Java 對象訪問和操縱數據庫實體。 它通過處理事務管理,自動主鍵生成,管理數據庫連接和相關實現等方面,有助于加快整個開發過程。 * #### JPA 供應器 Hibernate 確實支持 [**Java 持久化 API**](https://docs.oracle.com/javaee/6/tutorial/doc/bnbpz.html)(JPA)規范。 JPA 是一組用于在 Java 對象和關系數據庫實體之間訪問,持久化和管理數據的規范。 * #### 慣用的持久化 遵循[面向對象原理](https://howtodoinjava.com/oops/object-oriented-principles/)的任何類(例如繼承,多態等)都可以用作持久類。 * #### 高性能和可擴展性 Hibernate 支持各種技術,例如不同的獲取策略,延遲初始化,樂觀鎖定等,以實現高性能,并且可以在任何環境中很好地擴展。 * #### 易于維護 Hibernate 不需要特殊的數據庫表或字段,因此更易于維護。 它在系統初始化時生成 SQL。 與 JDBC 相比,它維護起來更快,更容易。 在此頁面中,我已對該博客中所有可用的 **Hiberate 示例**進行了分類。 每次都會更新此頁面,此博客中發布了一個新的 Hiberate 教程。 敬請關注 !! 隨意建議您想閱讀的主題。 ## HelloWorld 應用 #### [**Hibernate 3 簡介和編寫 HelloWorld 應用**](//howtodoinjava.com/hibernate/hibernate-3-introduction-and-writing-hello-world-application/ "Hibernate 3 introduction and writing HelloWorld application") 在本文中,我將嘗試詳細介紹有關 hibernate 的更多信息,然后將確定在我們第一個運行的 **java hibernate 示例**應用中使用 hibernate 的基本步驟。 ## 基本概念 #### [如何在 Hiberate 4 中構建`SessionFactory`](//howtodoinjava.com/hibernate/hibarnate-4-how-to-build-sessionfactory/ "Hibarnate 4 : How to build SessionFactory") 如果您一直在觀看以前的 Hiberate 版本,那么您一定已經注意到它們已經連續快速棄用了許多類。 不推薦使用的類是`AnnotationConfiguration`和`ServiceRegistryBuilder`,依此類推。 在這個 Hiberate 教程中,我給出了一個構建 Hiberate `SessionFactory`而不使用上面提到的不推薦使用的類的示例。 我正在使用**最新的 Hiberate 版本**,即`Hibernate 4.3.6.Final`,因此您可以確保使用最新的方法來構建會話工廠。 #### [實體等價和等同概念](//howtodoinjava.com/hibernate/hibernate-entities-equality-and-identity/ "Hibernate Entities Equality and Identity") 在我們的應用中,很多時候我們都面臨著這樣的情況,我們必須比較兩個對象以檢查它們的相等性以滿足某些業務規則。 在核心 Java 中,我們已經掌握了檢查對象是否相等的知識,但是在 Hiberate 下,我們還需要注意一些額外的事情。 讓我們了解一下那些額外的概念。 #### [定義 Hiberate 實體之間的關聯映射](//howtodoinjava.com/hibernate/how-to-define-association-mappings-between-hibernate-entities/ "How to Define Association Mappings between Hibernate Entities") 當我們使用 JPA 注解對 Java 類進行注解并使其成為持久化實體時,我們可能會遇到兩個實體可以關聯并且必須相互引用的情況,無論是單向還是雙向。 在實際在 Hiberate 實體之間創建引用之前,讓我們了解一些基本知識。 #### [實體/持久化生命周期狀態概念](//howtodoinjava.com/hibernate/hibernate-entity-persistence-lifecycle-states/ "Hibernate Entity / Persistence LifeCycle States") 給定一個映射到 Hibernate 的對象的實例,它可以處于四種不同狀態中的任何一種:瞬態,持久,分離或刪除。 我們今天將在這個 Hiberate 教程中學習它們。 #### [將內存數據庫與 Hiberate 一起使用](//howtodoinjava.com/hibernate/hibernate-4-using-in-memory-database-with-hibernate/ "Hibernate 4 : Using In-memory Database With Hibernate") 在此示例中,我使用 HSQLDB 數據庫通過我們的 Hiberate 代碼創建和訪問內存數據庫。 #### [Hiberate JPA 級聯類型](//howtodoinjava.com/hibernate/hibernate-jpa-cascade-types/ "Hibernate JPA Cascade Types") 為了啟用**級聯和反向**效果,我們在實體中使用了“`CascadeType`”屬性。 在本教程中,我們將學習通過`CascadeType`進行級聯的各種可用選項。 #### [Hiberate 注解與映射的優缺點](//howtodoinjava.com/hibernate/pros-and-cons-of-hibernate-annotations-vs-mappings/ "Pros and Cons of Hibernate Annotations Vs Mappings") 您可能知道,在內聯注解之前,創建 Hiberate 映射的唯一方法是通過 XML 文件。 盡管來自 Hibernate 和第三方項目的各種工具允許部分或全部映射從 Java 源代碼自動生成。 今天,注解是定義映射的最新方法,但并不是自動的最佳方法。 讓我們先討論 Hiberate(或我應該說 JPA)注解的缺點和好處,然后再討論何時應用它們。 #### [Hiberate 查詢語言(HQL)](//howtodoinjava.com/hibernate/complete-hibernate-query-language-hql-tutorial/ "Complete Hibernate Query Language [HQL] Tutorial") HQL 是一種類似于 SQL 的面向對象的查詢語言,但是 HQL 不會對表和列進行操作,而是處理持久化對象及其屬性。 它是 JPQL(Java 持久化查詢語言)的超集; JPQL 查詢是有效的 HQL 查詢,但并非所有 HQL 查詢都是有效的 JPQL 查詢。 HQL 是一種具有自己的語法和語法的語言。 讓我們使用以下示例學習 HQL: 1. 基本 HQL 語法 * 更新操作 * 刪除操作 * 插入操作 * 選擇操作 2. `from`子句和別名 3. `select`子句和投影 4. 使用命名參數 5. 分頁結果集 6. 獲得獨特的結果 7. 使用`order by`子句對結果進行排序 8. 關聯 9. 匯總方法 10. 命名查詢 11. 使用本機 SQL 12. 啟用日志記錄和注解 #### [Hiberate 條件查詢](//howtodoinjava.com/hibernate/hibernate-criteria-queries-tutorial-and-examples/ "Hibernate Criteria Queries Tutorial and Examples") 條件查詢 API 使您可以用 Java 構建嵌套的結構化查詢表達式,從而提供了編譯時語法檢查,而這是使用 HQL 或 SQL 這樣的查詢語言無法實現的。 條件查詢 API 還包括示例查詢(QBE)功能。 這樣,您就可以提供示例對象,這些對象包含要檢索的屬性,而不必逐步說明查詢的組件。 它還包括投影和聚合方法,包括`count()`。 讓我們詳細探討它的不同功能。 1. 基本用法示例 2. 對條件使用限制 3. 分頁結果集 4. 獲得獨特的結果 5. 獲得不同的結果 6. 對查詢結果進行排序 7. 執行關聯(連接) 8. 添加投影 9. 示例查詢(QBE) 10. 總結 #### [Hiberate 中的延遲加載](//howtodoinjava.com/hibernate/lazy-loading-in-hibernate/ "Lazy Loading in Hibernate") 在本教程中,我將討論 Hiberate 中必須被稱為延遲加載的功能。 如果您在大型應用中工作,這特別有用。 ## CRUD 操作實例 #### [**Hiberate 插入查詢教程**](//howtodoinjava.com/hibernate/hibernate-insert-query-tutorial/ "Hibernate insert query tutorial") 在本教程中,我給出了在單個表中插入數據的示例。 #### [**Hiberate 命名查詢教程**](//howtodoinjava.com/hibernate/hibernate-named-query-tutorial/ "Hibernate named query tutorial") Hiberate 中的命名查詢是一種將 HQL 語句分組在單個位置的技術,并在以后需要使用它們時以某種名稱對其進行引用。 由于這些 HQL 語句不再分散在整個代碼中,因此在很大程度上有助于代碼清除。 #### [從數據庫中加載實體的示例](//howtodoinjava.com/hibernate/how-to-load-get-entity-in-hibernate/ "How to load / get entity in hibernate") 使用`load`或`get`方法加載 Hiberate 實體的示例。 #### [用于保存實體的`Save()`和`saveOrUpdate()`](//howtodoinjava.com/hibernate/save-and-saveorupdate-for-saving-hibernate-entities/ "Save() and saveOrUpdate() for Saving Hibernate Entities") 請不要創建使用 Hiberate 注解映射的類的實例不會自動將對象持久保存到數據庫中。 將其附加到有效的 Hiberate 會話后,必須顯式保存它。 讓我們學習如何做。 #### [合并和刷新實體](//howtodoinjava.com/hibernate/merging-and-refreshing-hibernate-entities/ "Merging and Refreshing Hibernate Entities") 在本教程中,我將討論有關 Hiberate 會話類中存在的`refresh()`和`merge()`方法的一些想法。 ## Hiberate 實體映射 #### [**使用注解的 Hiberate 一對一映射**](//howtodoinjava.com/hibernate/hibernate-one-to-one-mapping-using-annotations/ "Hibernate one-to-one mapping using annotations") 讓我們討論一下 hibernate 支持的一對一映射的變體: 1. 使用外鍵關聯 2. 使用通用連接表 3. 使用共享主鍵 #### [**使用注解的 Hiberate 一對多映射**](//howtodoinjava.com/hibernate/hibernate-one-to-many-mapping-using-annotations/ "hibernate one to many mapping using annotations") 討論 Hiberate 中支持的一對多映射的變體: 1. 使用外鍵關聯 2. 使用連接表 #### [**使用注解的 Hiberate 多對多映射**](//howtodoinjava.com/hibernate/hibernate-many-to-many-mapping-using-annotations/ "Hibernate many-to-many mapping using annotations") 討論 Hibernate 中支持的多對多映射的變體。 ## Hiberate 連接池和緩存 #### [C3P0 連接池配置教程](//howtodoinjava.com/hibernate/hibernate-c3p0-connection-pool-configuration-tutorial/ "Hibernate C3P0 Connection Pool Configuration Tutorial") 默認情況下,Hibernate 使用 JDBC 連接以便與數據庫進行交互。 創建這些連接非常昂貴 - Hibernate 在典型的使用情況下可能會執行最昂貴的單個操作。 由于 JDBC 連接管理非常昂貴,因此您可能會建議您使用連接池,它可以提前打開連接(并僅在需要時關閉它們,而不是“不再使用時”)。 C3P0 是外部連接池的示例。 在本教程中,我們將學習如何將其與 hibernate 一起使用。 #### [**Hiberate EhCache 配置**](//howtodoinjava.com/hibernate/hibernate-ehcache-configuration-tutorial/ "Hibernate EhCache configuration tutorial") 緩存是 ORM 框架提供的功能,可幫助用戶獲得快速運行的 Web 應用,同時幫助框架本身減少在單個事務中對數據庫的查詢數量。 Hibernate 還在第一級和第二級提供此緩存功能。 在本教程中,我將舉一個使用 ehcache 配置作為 hibernate 中的二級緩存的示例。 #### [**Hiberate 一級緩存示例**](//howtodoinjava.com/hibernate/understanding-hibernate-first-level-cache-with-example/ "Understanding hibernate first level cache with example") 默認情況下,Hiberate 下的第一級緩存已啟用,您無需執行任何操作即可使此功能正常工作。 讓我們進一步了解它。 #### [**Hiberate 二級緩存示例**](//howtodoinjava.com/hibernate/how-hibernate-second-level-cache-works/ "How hibernate second level cache works?") 在本教程中,我將提供有關 Hiberate 二級緩存的概念,并提供使用代碼段的示例。 ## Hiberate 最佳實踐 #### [**Hiberate `@NaturalId`用法和示例**](//howtodoinjava.com/hibernate/hibernate-naturalid-example-tutorial/ "Hibernate @NaturalId example tutorial") Hibernate 4 帶來了許多改進,而`@NaturalId`就是這樣很好的改進之一。 如您所知,`@Id`注解用作指定實體主鍵的元數據。 但是有時,實體通常在 DAO 層代碼中使用 ID,該 ID 不是主鍵,而是其邏輯或自然 ID。 在這種情況下,`@NaturalId`注解將證明是 Hiberate 下命名查詢的良好替代。 #### [**獲取延遲加載的實體引用**](//howtodoinjava.com/hibernate/hibernate-4-example-to-get-entity-reference-for-lazy-loading/ "Hibernate 4 example to get entity reference for lazy loading") 延遲加載是計算機編程中常用的一種設計模式,用于將對象的初始化推遲到需要它的時間點。 可以通過在 Hiberate 映射注解中指定“`fetch = FetchType.LAZY`”來完成 Hiberate 延遲加載。 ## 與其他框架的整合 #### [**將 Hibernate 與 Spring 框架集成**](//howtodoinjava.com/spring/spring-orm/spring-3-and-hibernate-integration-tutorial-with-example/ "Spring 3 and hibernate integration tutorial with example") 本 Hiberate 教程側重于將 Spring 3 框架與 Hibernate 結合使用。 我將展示這種集成的結果,一個基本的端到端應用流看起來如何。 ## 您可能會遇到的異常 #### [[已解決]初始`SessionFactory`創建失敗。`org.hibernate.HibernateException`:命名查詢中的錯誤](https://howtodoinjava.com/hibernate/solved-initial-sessionfactory-creation-failed-org-hibernate-hibernateexception-errors-in-named-queries/) ## Hibernate 教程參考 #### [Hiberate 文檔](http://hibernate.org/ "hibernate home")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看