You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Spring JPA Criteria Query实现AssetItem多条件分页查询

基于Criteria Query的动态查询实现

1. 改造Repository接口

要使用Criteria Query,你的Repository需要继承JpaSpecificationExecutor<AssetItem>,这样才能支持动态条件的分页查询:

public interface AssetItemRepository extends JpaRepository<AssetItem, Long>, JpaSpecificationExecutor<AssetItem> {
}

2. 完善Service层的查询逻辑

在findByCondition方法中,根据AssetItemDto的参数动态构建查询条件:

import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import javax.persistence.criteria.Predicate;
import java.util.ArrayList;
import java.util.List;

public Page<AssetItemDto> findByCondition(AssetItemDto assetItemDto, Pageable pageable) {
    // 构建动态查询条件
    Specification<AssetItem> spec = (root, query, cb) -> {
        List<Predicate> predicates = new ArrayList<>();
        
        // 当name非空时,添加name匹配条件
        if (StringUtils.hasText(assetItemDto.getName())) {
            predicates.add(cb.equal(root.get("name"), assetItemDto.getName()));
        }
        
        // 当code非空时,添加code匹配条件
        if (StringUtils.hasText(assetItemDto.getCode())) {
            predicates.add(cb.equal(root.get("code"), assetItemDto.getCode()));
        }
        
        // 所有条件用AND连接,自动适配参数组合情况
        return cb.and(predicates.toArray(new Predicate[0]));
    };
    
    // 执行分页查询
    Page<AssetItem> entityPage = repository.findAll(spec, pageable);
    
    // 转换为DTO分页对象(假设mapList是你已实现的实体转DTO工具方法)
    return new PageImpl<>(mapList(entityPage.getContent(), AssetItemDto.class), pageable, entityPage.getTotalElements());
}

逻辑说明

  • 用StringUtils.hasText()判断参数是否为有效非空值(排除空字符串、全空格的情况)
  • 动态生成查询条件:
    • 若name和code都非空,自动生成name = ? AND code = ?的查询
    • 仅name非空时,只执行name = ?的查询;仅code非空时同理
  • 依赖JpaSpecificationExecutor的findAll方法实现带条件的分页查询

注意事项

  • 确保AssetItem实体类中存在与DTO对应的name、code字段,且与数据库表字段映射正确
  • 引入代码中所需的Spring Data JPA及JPA Criteria相关依赖包

内容的提问来源于stack exchange,提问作者Mohit H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:35:25