zoukankan      html  css  js  c++  java
  • JPA的查询语言:JPQL的命名查询 @NamedQuery

    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

  • 相关阅读:
    Flex动画
    八大排序算法
    Android switch语句“case expressions must be constant expressions”
    MySQL修改root密码的多种方法
    Android中ListView控件onItemClick事件中获取listView传递的数据
    超详细Android接入支付宝支付实现,有图有真相
    Android蓝牙开发---与蓝牙模块进行通信
    Leecode no.19 删除链表的倒数第 N 个结点
    玩转java静态/动态代理
    Leecode no.198. 打家劫舍
  • 原文地址:https://www.cnblogs.com/myitmylife/p/3591071.html
Copyright © 2011-2022 走看看