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

  • 相关阅读:
    【转载】ASP.NET Core读取appsettings.json配置文件信息
    node.js安装教程(简单易懂)
    记一次使用typescript模板初始化React项目的几个问题
    es分页查询 scroll
    Redis5设计与源码分析 (第15章 有序集合相关命令的实现)
    Redis5设计与源码分析 (第14章 集合相关命令的实现)
    Redis5设计与源码分析 (第13章 列表相关命令的实现)
    Redis5设计与源码分析 (第12章 散列表相关命令的实现)
    Redis5设计与源码分析 (第11章 字符串相关命令的实现)
    Redis5设计与源码分析 (第9章 命令处理生命周期)
  • 原文地址:https://www.cnblogs.com/myitmylife/p/3591071.html
Copyright © 2011-2022 走看看