💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
~~~ JPA中的复杂查询 JPQL全称 Java Persistence Query Language 基于首次在EJB2.0中引入的EJB查询EJB查询语言(EJB QL),Java持久化查询语言(JPQL) 是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义 绑定在一起,使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的 SQL 其特征与原生的SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性 JPQL查询 SQL:查询的是表和表中的字段 jpql: 查询的是实体类和类中的属性 *jpql和sql语句的语法相似 1.查询全部 2.分页查询 3.统计查询 4.条件查询 5.排序 ~~~ ***** 测试代码 `JPQLTest.java` ~~~ package net.youworker; import net.youworker.domain.Customer; import net.youworker.utils.JpaUtils; import org.junit.Test; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.Query; import java.util.List; /** * @author: hcf * @qq: 46914685 * @email: 46914685@qq.com * @date: 2020-01-06 14:43 */ public class JPQLTest { /** * 查询全部: * jqpl: from net.youworker.domain.Customer 或 from Customer * sql:select * from cst_customer */ @Test public void testFindAll() { // 1.获取entityManager对象 EntityManager entityManager = JpaUtils.getEntityManager(); //开启事务 EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); //查询全部 // String jpql = "from net.youworker.domain.Customer"; //查询实体类 String jpql = "from Customer"; //查询实体类 Query query = entityManager.createQuery(jpql); //发送查询,并封装结果集 List resultList = query.getResultList(); System.out.println(resultList); //提交事务 transaction.commit(); //释放资源 entityManager.close(); } /** * 排序查询: * jqpl: from Customer order by custId desc * sql:select * from cst_customer order by cust_id desc */ @Test public void testSort() { // 1.获取entityManager对象 EntityManager entityManager = JpaUtils.getEntityManager(); //开启事务 EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); //查询全部 String jpql = "from Customer order by custId desc"; //查询实体类 Query query = entityManager.createQuery(jpql); //发送查询,并封装结果集 List resultList = query.getResultList(); System.out.println(resultList); //提交事务 transaction.commit(); //释放资源 entityManager.close(); } /** * 使用jpql查询,统计客户的总数: * jqpl: select count(custId) from Customer * sql:select count(*) from cst_customer */ @Test public void testCount() { // 1.获取entityManager对象 EntityManager entityManager = JpaUtils.getEntityManager(); //开启事务 EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); //查询全部 //根据jpql语句创建Query查询对象 String jpql = "select count(custId) from Customer"; //查询实体类 Query query = entityManager.createQuery(jpql); //发送查询,并封装结果集 /** * getResultList():直接将查询结果封装为list集合 * getSingleResult():得到唯一的结果集 */ Object singleResult = query.getSingleResult(); Long ii = (Long) singleResult; System.out.println(singleResult); System.out.println(ii); //提交事务 transaction.commit(); //释放资源 entityManager.close(); } /** * 使用jpql分页: * jqpl: from Customer * sql:select count(*) from cst_customer limit ?,? */ @Test public void testPage() { // 1.获取entityManager对象 EntityManager entityManager = JpaUtils.getEntityManager(); //开启事务 EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); //查询全部 //根据jpql语句创建Query查询对象 // String jpql = "from Customer"; //查询实体类 String jpql = "from Customer order by custId desc "; //查询实体类 Query query = entityManager.createQuery(jpql); //对参数赋值 -- 分页参数 //起始索引 query.setFirstResult(0); //每页查询的条数 query.setMaxResults(2); //发送查询,并封装结果集 List resultList = query.getResultList(); System.out.println(resultList); //提交事务 transaction.commit(); //释放资源 entityManager.close(); } /** * 条件查询: * jqpl: from Customer where custName like ? * sql:select * from cst_customer where cust_name like ? */ @Test public void testSearch() { // 1.获取entityManager对象 EntityManager entityManager = JpaUtils.getEntityManager(); //开启事务 EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); //查询全部 String jpql = "from Customer where custName like ?1 "; //查询实体类 // String jpql = "from Customer"; //查询实体类 Query query = entityManager.createQuery(jpql); //对参数赋值 -- 占位符参数 //第一个参数:占位符的索引位置(1开始),第二个参数:取值 List<Customer> resultList = query.setParameter(1, "%有%").getResultList(); //发送查询,并封装结果集 // List resultList = query.getResultList(); for (Customer obj : resultList) { System.out.println(obj.getCustId()); System.out.println(obj.getCustName()); } //提交事务 transaction.commit(); //释放资源 entityManager.close(); } } ~~~