java分页模糊查询
时间: 2025-01-13 10:13:32 浏览: 44
### Java 中实现分页和模糊查询的最佳实践
#### 使用 Spring Data JPA 实现分页和模糊查询
Spring Data JPA 提供了一种简洁的方式来处理数据库中的分页和模糊查询。通过继承 `JpaRepository` 和 `JpaSpecificationExecutor` 接口,可以轻松实现这些功能。
```java
public interface ProductRepository extends JpaRepository<ProductDomain, String>, JpaSpecificationExecutor<ProductDomain> {
}
```
为了实现分页和模糊查询,通常会结合使用 `Pageable` 和 `Specifications` 或者 JPQL 查询构建器来动态生成查询条件[^4]。
#### 动态构建查询条件
对于模糊查询,可以通过 `CriteriaBuilder` 来构建复杂的查询逻辑:
```java
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
public class ProductSpecification implements Specification<ProductDomain> {
private SearchCriteria criteria;
public ProductSpecification(SearchCriteria criteria) {
this.criteria = criteria;
}
@Override
public Predicate toPredicate(Root<ProductDomain> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
if (criteria.getOperation().equalsIgnoreCase(">")) {
return builder.greaterThanOrEqualTo(
root.<String> get(criteria.getKey()), criteria.getValue().toString());
}
else if (criteria.getOperation().equalsIgnoreCase("<")) {
return builder.lessThanOrEqualTo(
root.<String> get(criteria.getKey()), criteria.getValue().toString());
}
else if (criteria.getOperation().equalsIgnoreCase(":")) {
if (root.get(criteria.getKey()).getJavaType() == String.class) {
return builder.like(root.<String>get(criteria.getKey()), "%" + criteria.getValue() + "%");
} else {
return builder.equal(root.get(criteria.getKey()), criteria.getValue());
}
}
return null;
}
}
```
此代码片段展示了如何根据不同的操作符(如大于、小于或等于)以及字段类型(字符串或其他),灵活地应用匹配规则。
#### 执行带分页的查询请求
当准备好规格化对象之后,就可以调用存储库方法并传入所需的页面参数来进行实际的数据检索了:
```java
Pageable paging = PageRequest.of(pageNumber, pageSize);
Page<ProductDomain> pageResult = productRepository.findAll(specification, paging);
if (pageResult.hasContent()) {
List<ProductDomain> products = pageResult.getContent();
} else {
System.out.println("No content found.");
}
```
上述代码说明了怎样设置每一页显示多少条记录 (`pageSize`) 及当前要查看的是第几页 (`pageNumber`) ,从而获得相应的数据集。
阅读全文
相关推荐

















