JPA各种查询+sql查询分页数据偏移操作

@Service
@Slf4j
public class UserServiceImpl implements UserService {
    @Resource
    UesrRepository uesrRepository;

    @Override
    public List<User> findData() {
        List<User> user=uesrRepository.findAll();
        return user;
    }

    @Override
    public void updateData(User user) {
        uesrRepository.save(user);
    }

    @Override
    public void deleteData(Long id) {
        uesrRepository.deleteById(id);
    }

    @Override
    public void addData(User user) {
        uesrRepository.save(user);
        //saveAll:底层代码仍是用save,但是由于不需要创建事务,所以数据量大时存储速度会快
//        uesrRepository.saveAll(List<>);
    }

    @Override
    public List<User> findDataByIdDesc() {
        Sort sort= Sort.by(new Sort.Order(Sort.Direction.DESC,"id"));
        return uesrRepository.findAll(sort) ;
    }

    /**
     * 根据名字模糊查----条件查询
     * */
    @Override
    public List<User> requirementFindLikeName(String name) {
        Specification<User> specification=((root, criteriaQuery, criteriaBuilder) -> {
            Path<User> path = root.get("name");
            Predicate  predicateLike=criteriaBuilder.like(path.as(String.class),name+'%');
            return predicateLike;
        });
        return uesrRepository.findAll(specification);
    }

    /**
     * 排序查询
     * */
    @Override
    public List<User> findDataByIdAsc() {
        Sort sort= Sort.by(new Sort.Order(Sort.Direction.ASC,"id"));
        return uesrRepository.findAll(sort) ;
    }
    /**
     * 分页查询
     * */
    @Override
    public Page<User> pageFindDate(int pageNo, int pageSize){
        Pageable pageable = PageRequest.of(pageNo-1, pageSize);
        Page<User> page = uesrRepository.findAll(pageable);
        return page;
    }
    /**
     * 复杂查询,条件封装查询
     * */
    public List<User>findByRequire(User param){
        List<Predicate> require =new ArrayList<>();
        Specification specification=((root, criteriaQuery, criteriaBuilder) -> {
            if (!param.getName().isEmpty()){
                Predicate predicate1= criteriaBuilder.equal(root.get("name"),param.getName());
                require.add(predicate1);
            }
            return criteriaBuilder.and(require.toArray(new Predicate[require.size()]));
        });
        return uesrRepository.findAll(specification);
    }

    /**
     * 条件封装  封装时间(date类型 YYYY-mm-dd),人员(精准查询),会议标题(模糊查询)
     * */
    public List<User> findMsg(User user){
        log.info("[***********findMsg***********]");
        List<Predicate> require=new ArrayList<>();
        Specification specification=((root, criteriaQuery, criteriaBuilder) -> {
            if (user.getDate()!=null){
                log.info("findMsg----date");
                Predicate predicateDate=criteriaBuilder.equal(root.get("date"),user.getDate());
                require.add(predicateDate);
            }
            if(user.getName()!=null){
                log.info("findMsg----name");
                Predicate predicate1= criteriaBuilder.like(root.get("name"),'%'+user.getName()+'%');
                require.add(predicate1);
            }
            if (user.getSex()!=null){
                log.info("findMsg----sex");
                Predicate predicate2= criteriaBuilder.equal(root.get("sex"),user.getSex());
                require.add(predicate2);
            }
            return criteriaBuilder.and(require.toArray(new Predicate[require.size()]));
        });
        return uesrRepository.findAll(specification);
    }

    /**
     * 查询时间段的数据+状态
     * */
    @Override
    public List<User> findBydateAndsuatus(FindParam findParam) {
        log.info("[***********findBydateAndsuatusImpl***********]");
        List<Predicate> predicates=new ArrayList<>();
        Specification specification=((root, criteriaQuery, criteriaBuilder) ->{

            if(findParam.getBeginTime()!=null){
                log.info("beginTime----info");
                Predicate predicateBegin=criteriaBuilder.greaterThan(root.get("date"),findParam.getBeginTime());
                predicates.add(predicateBegin);
            }
            if(findParam.getEndTime()!=null){
                log.info("endTime----info");
                Predicate predicateEnd=criteriaBuilder.lessThan(root.get("date"),findParam.getEndTime());
                predicates.add(predicateEnd);
            }
            if(findParam.getStatus()!=null){
                log.info("status----info");
                Predicate predicatestatus=criteriaBuilder.equal(root.get("kkk"),findParam.getStatus());
                predicates.add(predicatestatus);
            }
            if(findParam.getStatus()!=null){
                log.info("findMsg----name");
                Predicate predicate1= criteriaBuilder.like(root.get("name"),'%'+findParam.getStatus().toString()+'%');
                predicates.add(predicate1);
            }
            return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
        });
        return uesrRepository.findAll(specification);
    }
}

数据偏移:${pageSize} offset (${pageNo}-1)*${pageSize}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值