zoukankan      html  css  js  c++  java
  • JPA中的复杂查询

    JPQL全称Java Persistence Query Language

    基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。

    其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性

    1、查询全部

     1     /**
     2      * 查询全部
     3      *      jqpl:from cn.itcast.domain.Customer
     4      *      sql:SELECT * FROM cst_customer
     5      */
     6     @Test
     7     public void testFindAll() {
     8         //1.获取entityManager对象
     9         EntityManager em = JpaUtils.getEntityManager();
    10         //2.开启事务
    11         EntityTransaction tx = em.getTransaction();
    12         tx.begin();
    13         //3.查询全部
    14         //Customer相当于from cn.itcast.domain.Customer,此处省略了包名,Customer不可写成customer
    15         String jpql = "from Customer ";
    16         Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jqpl的对象
    17 
    18         //发送查询,并封装结果集
    19         List list = query.getResultList();
    20 
    21         for (Object obj : list) {
    22             System.out.print(obj);
    23         }
    24 
    25         //4.提交事务
    26         tx.commit();
    27         //5.释放资源
    28         em.close();
    29     }

    2、排序查询

     1     /**
     2      * 排序查询: 倒序查询全部客户(根据id倒序)
     3      *      sql:SELECT * FROM cst_customer ORDER BY cust_id DESC
     4      *      jpql:from Customer order by custId desc
     5      *      (custId:实体类属性)
     6      *
     7      * 进行jpql查询
     8      *      1.创建query查询对象
     9      *      2.对参数进行赋值
    10      *      3.查询,并得到返回结果
    11      */
    12     @Test
    13     public void testOrders() {
    14         //1.获取entityManager对象
    15         EntityManager em = JpaUtils.getEntityManager();
    16         //2.开启事务
    17         EntityTransaction tx = em.getTransaction();
    18         tx.begin();
    19         //3.查询全部
    20         String jpql = "from Customer order by custId desc";
    21         Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jqpl的对象
    22 
    23         //发送查询,并封装结果集
    24         List list = query.getResultList();
    25 
    26         for (Object obj : list) {
    27             System.out.println(obj);
    28         }
    29 
    30         //4.提交事务
    31         tx.commit();
    32         //5.释放资源
    33         em.close();
    34     }

    3、统计查询

     1     /**
     2      * 使用jpql查询,统计客户的总数
     3      *      sql:SELECT COUNT(cust_id) FROM cst_customer
     4      *      jpql:select count(custId) from Customer
     5      */
     6     @Test
     7     public void testCount() {
     8         //1.获取entityManager对象
     9         EntityManager em = JpaUtils.getEntityManager();
    10         //2.开启事务
    11         EntityTransaction tx = em.getTransaction();
    12         tx.begin();
    13         //3.查询全部
    14         //i.根据jpql语句创建Query查询对象
    15         String jpql = "select count(custId) from Customer";
    16         Query query = em.createQuery(jpql);
    17         //ii.对参数赋值
    18         //iii.发送查询,并封装结果
    19 
    20         /**
    21          * getResultList : 直接将查询结果封装为list集合
    22          * getSingleResult : 得到唯一的结果集
    23          */
    24         Object result = query.getSingleResult();
    25 
    26         System.out.println(result);
    27 
    28         //4.提交事务
    29         tx.commit();
    30         //5.释放资源
    31         em.close();
    32     }

    4、分页查询

     1     /**
     2      * 分页查询
     3      *      sql:select * from cst_customer limit 0,2
     4      *      jqpl : from Customer
     5      */
     6     @Test
     7     public void testPaged() {
     8         //1.获取entityManager对象
     9         EntityManager em = JpaUtils.getEntityManager();
    10         //2.开启事务
    11         EntityTransaction tx = em.getTransaction();
    12         tx.begin();
    13         //3.查询全部
    14         //i.根据jpql语句创建Query查询对象
    15         String jpql = "from Customer";
    16         Query query = em.createQuery(jpql);
    17         //ii.对参数赋值 -- 分页参数
    18         //起始索引(此处从0开始,不包含0)
    19         query.setFirstResult(0);
    20         //每页查询的条数
    21         query.setMaxResults(2);
    22 
    23         //iii.发送查询,并封装结果
    24 
    25         /**
    26          * getResultList : 直接将查询结果封装为list集合
    27          * getSingleResult : 得到唯一的结果集
    28          */
    29         List list = query.getResultList();
    30 
    31         for(Object obj : list) {
    32             System.out.println(obj);
    33         }
    34 
    35         //4.提交事务
    36         tx.commit();
    37         //5.释放资源
    38         em.close();
    39     }

    5、条件查询

     1     /**
     2      * 条件查询
     3      *     案例:查询客户名称以‘传智播客’开头的客户
     4      *          sql:SELECT * FROM cst_customer WHERE cust_name LIKE  ?
     5      *          jpql : from Customer where custName like ?
     6      */
     7     @Test
     8     public void testCondition() {
     9         //1.获取entityManager对象
    10         EntityManager em = JpaUtils.getEntityManager();
    11         //2.开启事务
    12         EntityTransaction tx = em.getTransaction();
    13         tx.begin();
    14         //3.查询全部
    15         //i.根据jpql语句创建Query查询对象
    16         String jpql = "from Customer where custName like ? ";
    17         Query query = em.createQuery(jpql);
    18         //ii.对参数赋值 -- 占位符参数
    19         //第一个参数:占位符的索引位置(从1开始),第二个参数:取值
    20         query.setParameter(1,"传智播客%");
    21 
    22         //iii.发送查询,并封装结果
    23 
    24         /**
    25          * getResultList : 直接将查询结果封装为list集合
    26          * getSingleResult : 得到唯一的结果集
    27          */
    28         List list = query.getResultList();
    29 
    30         for(Object obj : list) {
    31             System.out.println(obj);
    32         }
    33 
    34         //4.提交事务
    35         tx.commit();
    36         //5.释放资源
    37         em.close();
    38     }
  • 相关阅读:
    php字符串处理函数大全 转
    php http Manual
    HTTP协议详解 百度文库
    PHP获取指定日期的上个月的日期 转
    计算指定日期的前N个月日期
    MySQL之count(*)与count(id)效率比较<转>
    生成器
    可迭代对象_迭代器
    变量内容的删除替换和替代
    软件磁盘阵列
  • 原文地址:https://www.cnblogs.com/116970u/p/11590468.html
Copyright © 2011-2022 走看看