1. 首页
  2. 软件开发
  3. SpringData——JPQL常用的高级查询功能(关联查询、子查询、内建函数)

SpringData——JPQL常用的高级查询功能(关联查询、子查询、内建函数)

  • 发布于 2024-08-17
  • 1 次阅读

关联查询、子查询和内建函数是在JPQL中常用的高级查询功能,用于处理复杂的查询需求。

1. 关联查询

关联查询用于查询关联实体之间的数据,例如一对多或多对多关系。

代码如下:

String jpql = "SELECT c FROM Customer c JOIN c.orders o WHERE o.totalAmount > 1000";

EntityManager entityManager = entityManagerFactory.createEntityManager();
Query query = entityManager.createQuery(jpql);

List<Customer> customers = query.getResultList();

通过 JOIN c.orders o 关联查询客户和订单实体,然后筛选出订单总金额大于1000的客户。

2. 子查询

子查询是在查询语句中嵌套另一个查询,用于在一个查询中使用另一个查询的结果。

String jpql = "SELECT p FROM Product p WHERE p.price > (SELECT AVG(p.price) FROM Product p)";

EntityManager entityManager = entityManagerFactory.createEntityManager();
Query query = entityManager.createQuery(jpql);

List<Product> products = query.getResultList();

通过子查询 SELECT AVG(p.price) FROM Product p 来查询产品价格的平均值,并在主查询中筛选出价格高于平均值的产品。

3. 内建函数

JPQL提供了一些内建函数,用于在查询中执行常见的操作,如字符串处理、日期处理等。

String jpql = "SELECT p FROM Product p WHERE UPPER(p.name) LIKE '%PHONE%'";

EntityManager entityManager = entityManagerFactory.createEntityManager();
Query query = entityManager.createQuery(jpql);

List<Product> products = query.getResultList();

使用 UPPER(p.name) 内建函数将产品名称转换为大写,并通过 LIKE '%PHONE%' 筛选出名称中包含"PHONE"的产品。

原文链接: https://blog.csdn.net/2401_82884096/article/details/138043209