本篇文章給大家分享的是有關(guān)如何進(jìn)行JPA中JPQL的命名查詢,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到惠州網(wǎng)站設(shè)計(jì)與惠州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋惠州地區(qū)。
JPA的命名查詢實(shí)際上就是給查詢語(yǔ)句起個(gè)名字,執(zhí)行查詢的時(shí)候就是直接使用起的這個(gè)名字,避免重復(fù)寫(xiě)JPQL語(yǔ)句,使查詢?cè)诖a中得到更多的重用。我不怎么喜歡使用命名查詢,因?yàn)槲也幌氚巡樵冋Z(yǔ)句寫(xiě)在實(shí)體中,使得實(shí)體看起來(lái)變得復(fù)雜臃腫。
1、使用@NamedQuery注解在實(shí)體類中定義命名查詢。
@NamedQuery(name="findAllUser",query="SELECT u FROM User u")
@NamedQuery中的屬性name指定命名查詢的名稱,query屬性指定命名查詢的語(yǔ)句。
如果要定義多個(gè)命名查詢,需要使用@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方法傳入命名查詢的名稱創(chuàng)建查詢。
例如:createNamedQuery("findAllUser");
3、一個(gè)簡(jiǎn)單的例子。
簡(jiǎn)單的User實(shí)體:
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; } }
簡(jiǎn)單的測(cè)試:
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() { //根據(jù)在persistence.xml中配置的persistence-unit name 創(chuàng)建EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJPA"); } @After public void after() { //關(guān)閉EntityManagerFactory if(null != emf) { emf.close(); } } @Test public void testNamedQuery1() { EntityManager em = emf.createEntityManager(); List<User> users = em.createNamedQuery("findAllUser").getResultList();//根據(jù)User實(shí)體中定義的命名查詢 } @Test public void testNamedQuery2() { EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery("findUserWithId");//根據(jù)User實(shí)體中定義的命名查詢 query.setParameter(1, 2L); List<User> users = query.getResultList(); } @Test public void testNamedQuery3() { EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery("findUserWithName");//根據(jù)User實(shí)體中定義的命名查詢 query.setParameter("name", "李壞"); List<User> users = query.getResultList(); } }
以上就是如何進(jìn)行JPA中JPQL的命名查詢,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章題目:如何進(jìn)行JPA中JPQL的命名查詢
本文URL:http://m.rwnh.cn/article14/gdigge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、服務(wù)器托管、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、靜態(tài)網(wǎng)站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)