<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之旅 廣告
                # Hibernate `@NamedQuery`教程 > 原文: [https://howtodoinjava.com/hibernate/hibernate-named-query-tutorial/](https://howtodoinjava.com/hibernate/hibernate-named-query-tutorial/) Hiberate 中的命名查詢是一種技術,**用于將 HQL 語句分組在單個位置**中,并在以后需要使用它們時以某種名稱對其進行引用。 **它在很大程度上有助于代碼清除**,因為這些 HQL 語句不再分散在整個代碼中。 除了上面的內容,以下是命名查詢的一些次要**優勢**: 1. **快速失敗**:創建會話工廠時會檢查其語法,從而在發生錯誤時使應用快速失敗。 2. **可重用**:可以從多個位置訪問和使用它們,從而提高了可重用性。 但是,您必須知道,命名查詢確實**會使代碼的可讀性降低,并且有時調試變得更困難**,因為您必須找到正在執行的實際查詢定義,并且也必須對此有所了解。 **性能明智的命名查詢并沒有多大區別**,也不會增加任何開銷。 1. 與實際執行查詢的成本相比,將 HQL 查詢轉換為 SQL 的*成本可忽略不計*。 2. 緩存查詢的*內存開銷確實很小*。 請記住,Hibernate 無論如何都需要在內存中存儲所有實體元數據。 在本教程中,我將提供一個使用注解配置的命名查詢的示例。 我有一個`DepartmentEntity.java`類,它映射到數據庫中的`Department`表。 我編寫了兩個命名查詢,一個用于通過其 ID 更新部門名稱,第二個用于通過其 ID 選擇部門。 命名查詢定義具有兩個重要屬性: * **`name`** :使用 Hiberate 會話定位名稱查詢的名稱。 * **`query`**:在這里,您將給出 HQL 語句以在數據庫中執行。 #### `DepartmentEntity.java` ```java @Entity @Table(name = "DEPARTMENT", uniqueConstraints = { @UniqueConstraint(columnNames = "ID"), @UniqueConstraint(columnNames = "NAME") }) @NamedQueries ( { @NamedQuery(name=DepartmentEntity.GET_DEPARTMENT_BY_ID, query=DepartmentEntity.GET_DEPARTMENT_BY_ID_QUERY), @NamedQuery(name=DepartmentEntity.UPDATE_DEPARTMENT_BY_ID, query=DepartmentEntity.UPDATE_DEPARTMENT_BY_ID_QUERY) } ) public class DepartmentEntity implements Serializable { static final String GET_DEPARTMENT_BY_ID_QUERY = "from DepartmentEntity d where d.id = :id"; public static final String GET_DEPARTMENT_BY_ID = "GET_DEPARTMENT_BY_ID"; static final String UPDATE_DEPARTMENT_BY_ID_QUERY = "UPDATE DepartmentEntity d SET d.name=:name where d.id = :id"; public static final String UPDATE_DEPARTMENT_BY_ID = "UPDATE_DEPARTMENT_BY_ID"; private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", unique = true, nullable = false) private Integer id; @Column(name = "NAME", unique = true, nullable = false, length = 100) private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` 為了測試,在上面的命名查詢中,我編寫了以下代碼并執行了兩個命名查詢。 #### `TestHibernateNamedQuery.java` ```java public class TestHibernateNamedQuery { public static void main(String[] args) { //Open the hibernate session Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); try { //Update record using named query Query query = session.getNamedQuery(DepartmentEntity.UPDATE_DEPARTMENT_BY_ID) .setInteger("id", 1) .setString("name", "Finance"); query.executeUpdate(); //Get named query instance query = session.getNamedQuery(DepartmentEntity.GET_DEPARTMENT_BY_ID) .setInteger("id", 1); //Get all departments (instances of DepartmentEntity) DepartmentEntity department = (DepartmentEntity) query.uniqueResult(); System.out.println(department.getName()); } finally { session.getTransaction().commit(); HibernateUtil.shutdown(); } } } Output in console: Hibernate: update DEPARTMENT set NAME=? where ID=? Hibernate: select department0_.ID as ID0_, department0_.NAME as NAME0_ from DEPARTMENT department0_ where department0_.ID=? Finance ``` 其余支持代碼可以在教程最后隨附的源代碼中找到。 ## 要點: 1. 使用 JPA 樣式查詢語言。 例如,使用實體名代替表名。 2. 優選將命名查詢僅用于基于復雜條件選擇記錄。 不要過多地使用它們,否則就不會在簡單的 JDBC 上使用 ORM。 3. 請記住,命名查詢的結果不會緩存在輔助緩存中,只有查詢對象本身會被緩存。 4. 每當在代碼中添加任何命名查詢時,都要養成添加幾個單元測試用例的習慣。 并立即運行那些單元測試用例。 5. Hiberate 中不能有兩個具有相同名稱的命名查詢。 Hibernate 在這方面顯示出快速失敗的行為,并且將顯示應用啟動本身中的錯誤。 到目前為止,所有這些都與 Hiberate 中的命名查詢有關。 讓我知道您的想法和建議。 [源碼下載](https://docs.google.com/file/d/0B7yo2HclmjI4T3ZHRldLY0pKc0U/edit?usp=sharing "Hibernate named query tutorial") **祝您學習愉快!**
                  <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>

                              哎呀哎呀视频在线观看