14

プロジェクトの 1 つで、Spring Data を使用しています。クエリが複雑になってきているので、Spring Data Specification または QueryDSL を追加することを考えました。

ただし、今後の最善の方法についてはわかりません。どちらも同じ目的を果たしていると思います。どちらかが他のものよりも推奨されていますか?

ありがとう

4

1 に答える 1

21

Spring Data 仕様は Querydsl に比べて少し冗長です

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 のメンテナーであるため、この回答は偏っています。

于 2012-10-18T07:36:48.947 に答える