Spring Data JPA Criteria查询、部分字段查询
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
public interface CustomEntityRepository extends JpaRepository<CustomEntity, Long>, JpaSpecificationExecutor<CustomEntity> {
@Override
default Page<CustomEntity> findAll(Specification<CustomEntity> spec, Pageable pageable) {
return null; // 实现查询逻辑
}
default List<CustomEntity> findAll(Specification<CustomEntity> spec) {
return findAll(spec, new Sort(Sort.Direction.ASC, "id")).getContent();
}
static Specification<CustomEntity> getSpecification(final String field1Value, final String field2Value) {
return (Root<CustomEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> {
List<Predicate> predicates = new ArrayList<>();
if (field1Value != null) {
predicates.add(cb.equal(root.get("field1"), field1Value));
}
if (field2Value != null) {
predicates.add(cb.equal(root.get("field2"), field2Value));
}
return cb.and(predicates.toArray(new Predicate[0]));
};
}
}
这个代码示例展示了如何在Spring Data JPA中使用Specification
来进行部分字段的Criteria查询。getSpecification
方法创建了一个Specification
,根据传入的字段值构建了查询条件。在findAll
方法中,我们可以直接使用这个Specification
来查询满足条件的实体列表。这个例子中的查询是根据两个字段进行的,但是可以根据需要增加更多的字段和查询条件。
评论已关闭