首页 > 其他 > 详细

JPA的查询语言:JPQL的命名查询 @NamedQuery

时间:2014-03-11 07:35:55      阅读:478      评论:0      收藏:0      [点我收藏+]

JPA的命名查询实际上就是给查询语句起个名字,执行查询的时候就是直接使用起的这个名字,避免重复写JPQL语句,使查询在代码中得到更多的重用。我不怎么喜欢使用命名查询,因为我不想把查询语句写在实体中,使得实体看起来变得复杂臃肿。广州最好的java培训机构

  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实体:

  1. package com.cndatacom.jpa.entity;

  2.

  3. import javax.persistence.Column;

  4. import javax.persistence.Entity;

  5. import javax.persistence.GeneratedValue;

  6. import javax.persistence.Id;

  7. import javax.persistence.NamedQueries;

  8. import javax.persistence.NamedQuery;

  9. import javax.persistence.Table;

  10.

  11. @Entity

  12. @Table(name="t_user")

  13. @NamedQueries({

  14. @NamedQuery(name="findAllUser",query="SELECT u FROM User u"),

  15. @NamedQuery(name="findUserWithId",query="SELECT u FROM User u WHERE u.id = ?1"),

  16. @NamedQuery(name="findUserWithName",query="SELECT u FROM User u WHERE u.name = :name")

  17.

  18. })

  19. public class User {

  20.

  21.

  24. @Id

  25. @GeneratedValue

  26. private Long id;

  27.

  28.

  31. @Column(name="name")

  32. private String name;

  33.

  34.

  37. @Column(name="password")

  38. private String password;

  39.

  40. public Long getId() {

  41. return id;

  42. }

  43.

  44. public void setId(Long id) {

  45. this.id = id;

  46. }

  47.

  48. public String getName() {

  49. return name;

  50. }

  51.

  52. public void setName(String name) {

  53. this.name = name;

  54. }

  55.

  56. public String getPassword() {

  57. return password;

  58. }

  59.

  60. public void setPassword(String password) {

  61. this.password = password;

  62. }

  63.

  64. }

  简单的测试:

  1. package com.cndatacom.jpa.test;

  2.

  3. import java.util.List;

  4.

  5. import javax.persistence.EntityManager;

  6. import javax.persistence.EntityManagerFactory;

  7. import javax.persistence.Persistence;

  8. import javax.persistence.Query;

  9.

  10.

  11. import org.junit.After;

  12. import org.junit.Before;

  13. import org.junit.Test;

  14.

  15. import com.cndatacom.jpa.entity.User;

  16.

  17. public class TestNamedQuery {

  18.

  19. EntityManagerFactory emf = null;

  20.

  21. @Before

  22. public void before() {

  23. //根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory

  24. emf = Persistence.createEntityManagerFactory("myJPA");

  25. }

  26.

  27. @After

  28. public void after() {

  29. //关闭EntityManagerFactory

  30. if(null != emf) {

  31. emf.close();

  32. }

  33. }

  34.

  35. @Test

  36. public void testNamedQuery1() {

  37. EntityManager em = emf.createEntityManager();

  38. List users = em.createNamedQuery("findAllUser").getResultList();//根据User实体中定义的命名查询

  39. }

  40.

  41. @Test

  42. public void testNamedQuery2() {

  43. EntityManager em = emf.createEntityManager();

  44. Query query = em.createNamedQuery("findUserWithId");//根据User实体中定义的命名查询

  45. query.setParameter(1, 2L);

  46. List users = query.getResultList();

  47. }

  48.

  49. @Test

  50. public void testNamedQuery3() {

  51. EntityManager em = emf.createEntityManager();

  52. Query query = em.createNamedQuery("findUserWithName");//根据User实体中定义的命名查询

  53. query.setParameter("name", "李坏");

  54. List users = query.getResultList();

  55. }

  56. }

  QQ 744437114

  疯狂软件官网:www.fkjava.org

  疯狂java视频 android视频:http://www.fkjava.org/video.html

JPA的查询语言:JPQL的命名查询 @NamedQuery,布布扣,bubuko.com

JPA的查询语言:JPQL的命名查询 @NamedQuery

原文:http://www.cnblogs.com/myitmylife/p/3591071.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!