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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Hibernate 4 查詢語言 > 原文: [https://javabeginnerstutorial.com/hibernate/hibernate-4-with-query-languages/](https://javabeginnerstutorial.com/hibernate/hibernate-4-with-query-languages/) 在介紹了映射關系和繼承的 Hibernate 4 入門之后,讓我們更深入地了解如何獲取數據庫中存儲的數據。 如果查看示例應用的`main`方法,您會發現我正在使用從會話中生成的簡單標準查詢來列出和*計數*數據。 加載所有數據以對它們進行計數會過多,并且會占用太多內存。 還有其他方法,讓我向他們展示。 ## HQL 和 JPQL HQL 是 Hibernate 的默認查詢語言(縮寫為 Hibernate 查詢語言)。 JPQL 用于更通用的 Java 持久性查詢語言,它是 HQL 的子集。 這意味著有效的 JQPL 查詢也是有效的 HQL 查詢-但并非總是如此。 HQL 背后的主要思想是,您可以在查詢中使用實體名稱,而不是數據庫中的表名稱。 這使存儲和查詢更加透明,您可以在開發人員之間劃分任務,因為編寫查詢的人只需要知道實體名稱即可。 簡單 HQL 查詢是一個選擇查詢: ```java from Book ``` 是的,您可以在倉庫中看到這是一個有效的查詢。 如果提及實體,則可以使用其簡單名稱或實體的限定名稱(具有整個包結構)。 除了**選擇**,JPQL 和 HQL 允許**更新**和**刪除**語句。 HQL 也另外提供**插入**語句。 ### 關于區分大小寫的評論 HQL 和 JPQL 中的關鍵字不區分大小寫,這意味著`SELECT`,`select`和`SeLeCt`的含義相同。 但是實體名稱**區分大小寫**: `hibernate_example.Book`與`hibernate_example.BOOK`不同。 ### 關于類型安全的評論 HQL 和 JPQL 是非類型安全的查詢。 條件查詢提供了一種類型安全的方法。 類型安全性是什么意思? 您不必從查詢中將*對象*返回值轉換為所需的實體對象。 這就是為什么使用 Hibernate 的默認查詢機制時會收到編譯時警告的原因。 ## 創建和執行查詢 幸運的是,創建和執行查詢不需要特定的庫,可以通過我們在*主*方法中已經擁有的會話對象來完成。 為了將查詢與`main`方法分開,我添加了**信息庫**類,在其中實現了一些靜態函數來查詢數據庫。 因此,讓我們看一下查詢創建的不同版本。 它們都具有相同的根:*會話*對象,但是它們是通過調用不同的方法執行的。 查詢是執行查詢的最簡單方法,也是最常見的查詢方法: ```java session.createQuery("from Book").list(); ``` 使用條件可以通過編程方式限制結果集(例如,您需要更少的查詢輸入,并且可以在調試時輕松注釋掉條件行): ```java session.createCriteria(Author.class).add(Restrictions.like("name", "M%")).list(); ``` 上面的查詢返回名稱以字母`M`開頭的所有作者。 ## 本機查詢 有時,編寫本機查詢會很方便,因為您需要一些僅在您所使用的數據庫中可用的特定方法。 幸運的是,Hibernate 也支持本地查詢。 本機查詢是普通的舊 SQL,您必須在其中使用表名而不是實體名。 區別在于結果類型。 例如,使用 SQL 查詢對對象計數會使用 HQL 查詢返回`BigInteger`,而我們會返回 `Long`。 因此,更改查詢時間并不總是透明的,并且會在您的應用中引起一些討厭的錯誤。 為什么本地查詢會更好? 因為您可以消除 Hibernate 本質上執行的一些連接。 例如,對帶有 Hibernate 的`Authors`進行計數的查詢最終會導致以下 SQL: ```java select count(*) from Author a inner join PERSONS p on a.name = p.name ``` 但是,我們知道數據結構,因此可以說消除了連接: ```java return (BigInteger) session.createSQLQuery("select count(*) from author").uniqueResult(); ``` 缺點自然是我們失去了透明度,并且更改了繼承模型以適應查詢。 ## 總結 HQL 和 JPQL 是 Hibernate 附帶的本機查詢語言。 無需任何先決條件即可使用它們。 但是,它們是非類型安全的,這意味著您必須將結果轉換為相應的類型,如果無法完成轉換,則可能導致運行時異常。 在本文中,我沒有顯示標準查詢,參數化的和準備好的語句-但我將在以后的文章中進行介紹。 #### 代碼下載 您可以從 Github [此處](https://github.com/JBTAdmin/Hibernate)下載特定章節的代碼。
                  <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>

                              哎呀哎呀视频在线观看