SpringData JPA實現單表多條件分頁查詢,sql語句中同時包含 and or


1. 繼承JpaSpecificationExecutor

public interface DeviceRepository extends JpaRepository<Device,String>,JpaSpecificationExecutor {

}

 

2.重寫toPredicate 方法

 public Page findDeviceByParams(int pageNo, int pageSize, String rIndexCode, String name, String parentDevice) {

        try{
            Specification specification = new Specification() {
                @Override
                public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
                    List<Predicate> predicateList = new ArrayList<>();
                    if(!StringUtils.isEmpty(name)){
                        predicateList.add(criteriaBuilder.like(root.get("name"),"%" + name + "%"));
                    }
                    if(!StringUtils.isEmpty(parentDevice)){
                        predicateList.add(criteriaBuilder.like(root.get("parentDevice"),"%" + parentDevice + "%"));

                    }
                    predicateList.add(criteriaBuilder.equal(root.get("rIndexCode"),rIndexCode));
                    return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
                }
            };

            Sort sort = new Sort(Sort.Direction.ASC,"indexCode");
            PageRequest pageRequest = new PageRequest(pageNo-1,pageSize,sort);
            return deviceRepository.findAll(specification,pageRequest);
        }catch(Exception e){
            logger.error("查詢數據庫出錯:" + e);
            return null;
        }


    }

   springdata jpa 實現and or 組合查詢

  https://blog.csdn.net/langyan122/article/details/80608383

  https://blog.csdn.net/weixin_42475367/article/details

 springdata jpa Example查詢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM