您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何進行JPA中JPQL的命名查詢,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
JPA的命名查詢實際上就是給查詢語句起個名字,執行查詢的時候就是直接使用起的這個名字,避免重復寫JPQL語句,使查詢在代碼中得到更多的重用。我不怎么喜歡使用命名查詢,因為我不想把查詢語句寫在實體中,使得實體看起來變得復雜臃腫。
1、使用@NamedQuery注解在實體類中定義命名查詢。
@NamedQuery(name="findAllUser",query="SELECT u FROM User u")
@NamedQuery中的屬性name指定命名查詢的名稱,query屬性指定命名查詢的語句。
如果要定義多個命名查詢,需要使用@NamedQueries。
@NamedQueries({
@NamedQuery(name="findAllUser",query="SELECT u FROM User u"),
@NamedQuery(name="findUserWithId",query="SELECT u FROM User u WHERE u.id = ?1"),
@NamedQuery(name="findUserWithName",query="SELECT u FROM User u WHERE u.name = :name")
})
2、定義好命名查詢后,可以使用EntityManager的createNamedQuery方法傳入命名查詢的名稱創建查詢。
例如:createNamedQuery("findAllUser");
3、一個簡單的例子。
簡單的User實體:
package com.cndatacom.jpa.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; @Entity @Table(name="t_user") @NamedQueries({ @NamedQuery(name="findAllUser",query="SELECT u FROM User u"), @NamedQuery(name="findUserWithId",query="SELECT u FROM User u WHERE u.id = ?1"), @NamedQuery(name="findUserWithName",query="SELECT u FROM User u WHERE u.name = :name") }) public class User { /** * 主鍵 */ @Id @GeneratedValue private Long id; /** * 名字 */ @Column(name="name") private String name; /** * 密碼 */ @Column(name="password") private String password; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
簡單的測試:
package com.cndatacom.jpa.test; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.cndatacom.jpa.entity.User; public class TestNamedQuery { EntityManagerFactory emf = null; @Before public void before() { //根據在persistence.xml中配置的persistence-unit name 創建EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJPA"); } @After public void after() { //關閉EntityManagerFactory if(null != emf) { emf.close(); } } @Test public void testNamedQuery1() { EntityManager em = emf.createEntityManager(); List<User> users = em.createNamedQuery("findAllUser").getResultList();//根據User實體中定義的命名查詢 } @Test public void testNamedQuery2() { EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery("findUserWithId");//根據User實體中定義的命名查詢 query.setParameter(1, 2L); List<User> users = query.getResultList(); } @Test public void testNamedQuery3() { EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery("findUserWithName");//根據User實體中定義的命名查詢 query.setParameter("name", "李壞"); List<User> users = query.getResultList(); } }
以上就是如何進行JPA中JPQL的命名查詢,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。