业务逻辑优化
在我们使用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;
}