5、复杂查询

JPA

1、JPQL介绍

JPQL全称Java Persistence Query Language

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

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

2、jpql查询

介绍
  sql:查询的是表和表中的字段
​   jpql:查询的是实体类和类中的属性

​    * jpql和sql语句的语法相似

​  1、查询全部

​  2、分页查询

​  3、统计查询

​  4、条件查询

​  5、排序

3、代码展示

jpql查询:

​   1、创建query查询对象

​     getResultList:直接将查询结果封装为list集合

​     getSingleResult:得到唯一的结果集

​   2、对参数进行赋值

​   3、查询,并得到返回结果

查询全部:

/*
* 查询全部
*       jqpl:from Customer
*       sql:select * from cst_customer
* */
@Test
public void testFindAll(){
    
    
    //1.获取entityManager对象
    EntityManager em = JpaUtils.getEntityManager();
    //2.开启事务
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    //3.查询全部
    String jpql = "from Customer";
    Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jpql的对象
    List list = query.getResultList();

    for (Object obj:list){
    
    
    System.out.println(obj);
    }

    //4.提交事务
    tx.commit();
    //5.释放资源
    em.close();
}

查看结果:

在这里插入图片描述

在这里插入图片描述

排序查询:

/*
* 排序查询:倒序查询全部客户(根据id倒序)
*       jqpl:from Customer order by custId desc
*       sql:select * from cst_customer order by cust_id desc
* */
@Test
public void testOrder(){
    
    
    //1.获取entityManager对象
    EntityManager em = JpaUtils.getEntityManager();
    //2.开启事务
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    //3.查询全部
    String jpql = "from Customer order by custId desc";
    Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jpql的对象
    List list = query.getResultList();

    for (Object obj:list){
    
    
    System.out.println(obj);
    }

    //4.提交事务
    tx.commit();
    //5.释放资源
    em.close();
}

查看结果:

在这里插入图片描述

统计客户总数:

/*
* 统计客户总数:
*    sql:select count(cust_id) from cst_customer
*    jpql:select count(custId) from Customer
* */
@Test
public void testCount(){
    
    
    //1.获取entityManager对象
    EntityManager em = JpaUtils.getEntityManager();
    //2.开启事务
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    //3.查询全部
    //i.根据jpql语句创建Query查询对象
    String jpql = "select count(custId) from Customer";
    Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jpql的对象
    //ii.对参数赋值 、
    //iii.发送查询,并封装结果

    /*
    * getResultList:直接将查询结果封装为list集合
    * getSingleResult:得到唯一的结果集
    * */
    Object singleResult = query.getSingleResult();

    System.out.println(singleResult);

    //4.提交事务
    tx.commit();
    //5.释放资源
    em.close();
}

在这里插入图片描述

分页查询:

/*
* 分页查询
*       sql:select * from cst_customer limit ?,?
*       jpql:from Customer
* */
@Test
public void testPaged(){
    
    
    //1.获取entityManager对象
    EntityManager em = JpaUtils.getEntityManager();
    //2.开启事务
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    //3.查询全部
    //i.根据jpql语句创建Query查询对象
    String jpql = "from Customer";
    Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jpql的对象
    //ii.对参数赋值 --分页参数
    //起始索引 不包含0,从第0条开始查,0可以省略
    query.setFirstResult(0);
    //每页的条数
    query.setMaxResults(2);

    //iii.发送查询,并封装结果
    /*
    * getResultList:直接将查询结果封装为list集合
    * getSingleResult:得到唯一的结果集
    * */
    List list = query.getResultList();

    for (Object obj:list){
    
    
    System.out.println(obj);
    }

    //4.提交事务
    tx.commit();
    //5.释放资源
    em.close();
}

查看结果:

在这里插入图片描述

根据名称查询客户

/*
* 条件查询
*    案例:查询客户名称为实达迪美的客户
*    sql:select * from cst_customer where cust_name = ?
*    jqpl:from Customer where custName equals ?
* */
@Test
public void testCondition(){
    
    
    //1.获取entityManager对象
    EntityManager em = JpaUtils.getEntityManager();
    //2.开启事务
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    //3.查询全部
    //i.根据jpql语句创建Query查询对象
    String jpql = "from Customer where custName = ?";
    Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jpql的对象
    //ii.对参数赋值 --占位符参数
    //第一个参数:占位符的索引位置(从1开始),第二个参数:取值
    query.setParameter(1,"实达迪美");

    //iii.发送查询,并封装结果
    /*
    * getResultList:直接将查询结果封装为list集合
    * getSingleResult:得到唯一的结果集
    * */
    List list = query.getResultList();

    for (Object obj:list){
    
    
    System.out.println(obj);
    }

    //4.提交事务
    tx.commit();
    //5.释放资源
    em.close();
}

查看结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44230693/article/details/112389572
今日推荐