Specification数据库条件模糊复杂查询java实现

1.Maven包

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

2.引入

import org.springframework.data.jpa.domain.Specification;

3.Dao继承JpaSpecificationExecutor<TTankEntity>
4.使用方式

@Autowired
    TankManageDao tankManage;

    Mapper mapper = DozerBeanMapperBuilder.buildDefault();

    @Override
    public Map<String, Object> findTanks(Map<String, String> tableMap) {
        int current = Integer.valueOf(tableMap.get("current"));;
        int pageSize = Integer.valueOf(tableMap.get("pageSize"));;
        ArrayList<TTankVo> queryTanks = new ArrayList<>();
        Map<String, Object> returnMap = new HashMap<>();
        Sort sort = new Sort(Sort.Direction.ASC, "tankNo");
        Pageable pageable = new PageRequest(current-1,pageSize,sort);
        Specification<TTankEntity> specification = (root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<Predicate>();
            if (tableMap.get("tankName") != null) {
                String tankName = tableMap.get("tankName");
                predicates.add(cb.like(root.get("tankName"),"%"+tankName+"%"));
            }
            if (tableMap.get("tankNo") != null) {
                String tankNo = tableMap.get("tankNo");
                predicates.add(cb.like(root.get("tankNo"),"%"+tankNo+"%"));
            }
            if (tableMap.get("tankFarmid") != null) {
                String tankFarmid = tableMap.get("tankFarmid");
                predicates.add(cb.like(root.get("tankFarmid"),"%"+tankFarmid+"%"));
            }
            Predicate[] pre = new Predicate[predicates.size()];
            Predicate preAnd = cb.and(predicates.toArray(pre));
            return query.where(preAnd).getRestriction();
        };
        Page<TTankEntity> tankPage = tankManage.findAll(specification,pageable);
        for (TTankEntity tank : tankPage) {
            TTankVo tTankVo = mapper.map(tank, TTankVo.class);
            queryTanks.add(tTankVo);
        }
        returnMap.put("data", queryTanks);
        returnMap.put("total", tankManage.findAll(specification).size());
        returnMap.put("pageSize", pageSize);
        returnMap.put("current", current);
        return returnMap;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值