优化业务逻辑避免sql使用in查询超过一千条数据

业务逻辑优化
在我们使用mybatis里面的in关键字时有时会出现超出1000条的报错,这个时候我们优先优化业务逻辑代码,当然也可以选择优化SQL来进行实现。下面是我的一段代码进行部分优化。具体如下所示
主要思路1.分条 2.合并Ipage对象

   @Override
  public IPage<NotReportUser> queryHealthNotReport(List<String> reportedUserIds,NotReportUser notReportUser, List<String> deptIds, Date dayStart, Date dayEnd, IPage page) {

        int length = deptIds.size();
        int time=length%1000==0?length/1000:length/1000+1;

        long total=0;
        List<NotReportUser> records=new ArrayList<>();
        IPage<NotReportUser> notReportUserIPage=new Page<>();

        for (int i=0;i<time;i++){
           if ((i+1)<time) {

               List<String> deptIdsSplit = deptIds.subList(i * 1000, (i + 1) * 1000);

               IPage<NotReportUser> notReportUserIPageSplit = healthReportInfoMapper.queryHealthNotReport(reportedUserIds, notReportUser, deptIdsSplit, dayStart, dayEnd, page);

               List<NotReportUser> recordsSplit = notReportUserIPageSplit.getRecords();
               long totalSplit = notReportUserIPageSplit.getTotal();

               if (recordsSplit!=null&&totalSplit!=0) {
                   records.addAll(recordsSplit);
                   total+=totalSplit;
               }

               notReportUserIPage.setRecords(records);
               notReportUserIPage.setTotal(records.size());
           }else{

               List<String> deptIdsSplit = deptIds.subList(i*1000, length);

               IPage<NotReportUser> notReportUserIPageSplit = healthReportInfoMapper.queryHealthNotReport(reportedUserIds, notReportUser, deptIdsSplit, dayStart, dayEnd, page);

               List<NotReportUser> recordsSplit = notReportUserIPageSplit.getRecords();
               long totalSplit = notReportUserIPageSplit.getTotal();

               if (recordsSplit!=null) {
                   total+=totalSplit;
                   records.addAll(recordsSplit);
               }

               notReportUserIPage.setRecords(records);
               notReportUserIPage.setTotal(records.size());
           }

        }

        notReportUserIPage.setCurrent(page.getCurrent());
        notReportUserIPage.setSize(page.getSize());

        return notReportUserIPage;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值