Spring 数据规范或 QueryDSL

Posted

技术标签:

【中文标题】Spring 数据规范或 QueryDSL【英文标题】:Spring Data Specification or QueryDSL 【发布时间】:2012-10-07 15:39:36 【问题描述】:

在其中一个项目中,我们使用的是 Spring Data。现在查询变得越来越复杂,我们考虑添加 Spring Data Specification 或 QueryDSL。

但是,不确定最好的前进方式。我认为它们都有相同的目的。有没有比其他更推荐的?

谢谢

【问题讨论】:

【参考方案1】:

与 Querydsl 相比,Spring Data 规范有点冗长

public CustomerSpecifications 

  public static Specification<Customer> customerHasBirthday() 
    return new Specification<Customer> 
      public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) 
        return cb.equal(root.get(Customer_.birthday), today);
      
    ;
  

  public static Specification<Customer> isLongTermCustomer() 
    return new Specification<Customer> 
      public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) 
        return cb.lessThan(root.get(Customer_.createdAt), new LocalDate.minusYears(2));
      
    ;
  

与此相比

QCustomer customer = QCustomer.customer;
LocalDate today = new LocalDate();
BooleanExpression customerHasBirthday = customer.birthday.eq(today);
BooleanExpression isLongTermCustomer = customer.createdAt.lt(today.minusYears(2));

如果您要处理复杂的查询,您可能需要选择 Querydsl。我相信它会因为更紧凑而更好地扩展。

这个答案是有偏见的,因为我是Querydsl的维护者。

【讨论】:

我爱querydsl。它提供了本机查询将提供的几乎所有内容。干得好!

以上是关于Spring 数据规范或 QueryDSL的主要内容,如果未能解决你的问题,请参考以下文章

Spring数据访问和数据访问层与业务或服务层之间的交互

资源|详解Spring Boot编程思想-从技术到规范,从原理到源码-百度网盘免费资源分享

Spring Boot - 构建数据访问层

使用连接表存储库的@manytomany 中的 Spring 数据 jpa 规范和可分页

如何将spring数据jpa规范查询中的distinct和sort与join结合起来

Spring应用开发常见规范