Spring Data规范或QueryDSL

15
在其中一个项目中,我们正在使用Spring Data。现在查询变得越来越复杂,我们考虑添加Spring Data Specification或QueryDSL。
然而,不确定最好的方法是什么。我认为它们都能达到相同的目的。是否有一种比另一种更推荐?
谢谢
1个回答

25

与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的维护者,所以这个回答有偏见。


1
我喜欢 querydsl。它几乎提供了与本地查询相同的所有功能。做得好! - Lokesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接