in包含

3种方式登记,最优使用1,2。不建议使用第3种。

predicates.add(root.get("truckCode").in(truckCodes));
predicates.add(criteriaBuilder.in(root.get("truckCode")).value(truckCodes));
predicates.add(criteriaBuilder.in(root.get("truckCode").in(truckCodes)));
  • 1.
  • 2.
  • 3.

notIn包含

// 使用 criteriaBuilder.notIn() 方法创建 NOT IN 谓词
Predicate notInPredicate = criteriaBuilder.not(root.get("vin").in(excludedVins));
  • 1.
  • 2.



like模糊匹配

predicates.add(criteriaBuilder.like(root.get("vin"), "%" + reqTransitInformation.getVin() + "%"));
  • 1.

notLike模糊匹配

predicates.add(criteriaBuilder.notLike(root.get("vin"), "%" + reqTransitInformation.getVin() + "%"));
  • 1.


equal相等

predicates.add(criteriaBuilder.equal(root.get("orderNo"), reqTransitInformation.getOrderNo()));
  • 1.

notEqual相等

predicates.add(criteriaBuilder.notEqual(root.get("toStation"), "null"));
  • 1.


lt和lessThan小于

predicates.add(criteriaBuilder.lt(root.get("reportTime"), LocalDateTime.now()));
predicates.add(criteriaBuilder.lessThan(root.get("reportTime"), LocalDateTime.now()));
  • 1.
  • 2.

le和lessThanOrEqualTo小于等于

predicates.add(criteriaBuilder.le(root.get("reportTime"), LocalDateTime.now()));
predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("reportTime"), LocalDateTime.now()));
  • 1.
  • 2.


gt和greaterThan大于

predicates.add(criteriaBuilder.gt(root.get("reportTime"), LocalDateTime.now()));
predicates.add(criteriaBuilder.greaterThan(root.get("reportTime"), LocalDateTime.now()));
  • 1.
  • 2.

ge和greaterThanOrEqualTo大于等于

predicates.add(criteriaBuilder.ge(root.get("reportTime"), LocalDateTime.now()));
predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("reportTime"), LocalDateTime.now()));
  • 1.
  • 2.



between条件

predicates.add(criteriaBuilder.between(root.get("departureTime"), reqTransitInformation.departureTime()[0], reqTransitInformation.getArrivalTime()[1]));
  • 1.

greaterThanOrEqualTo和lessThanOrEqualTo条件

predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("departureTime"), reqTransitInformation.departureTime()[0]));
predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("departureTime"), reqTransitInformation.departureTime()[1]));
  • 1.
  • 2.

这里可以分开,也可以先把这2个由criteriaBuilder构建的单独predicate改为通过and合成1个 predicate。

如果所有条件都是and。可以不需要这做这步。

criteriaBuilder.and(criteriaBuilder.greaterThanOrEqualTo(root.get("departureTime"), reqTransitInformation.departureTime()[0]), criteriaBuilder.lessThanOrEqualTo(root.get("departureTime"), reqTransitInformation.departureTime()[1])));
  • 1.
predicates.add(criteriaBuilder.and(criteriaBuilder.greaterThanOrEqualTo(root.get("departureTime"), reqTransitInformation.getDepartureTime()[0]), criteriaBuilder.lessThanOrEqualTo(root.get("departureTime"), reqTransitInformation.getDepartureTime()[1])));
  • 1.