Spring数据规范或QueryDSL

adi*_*adi 9 spring specifications querydsl spring-data

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

但是,不确定前进的最佳方式.我认为他们都有同样的目的.是否推荐任何一个?

谢谢

Tim*_*per 14

与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));
      }
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

与此相比

QCustomer customer = QCustomer.customer;
LocalDate today = new LocalDate();
BooleanExpression customerHasBirthday = customer.birthday.eq(today);
BooleanExpression isLongTermCustomer = customer.createdAt.lt(today.minusYears(2));
Run Code Online (Sandbox Code Playgroud)

如果您打算处理复杂的查询,可能需要选择Querydsl.我相信它会更紧凑,因为它更紧凑.

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