尽量不要在循环里进行数据库操作
之前拿到一个接口,接口响应时间很长,组长让优化一下,梳理了一下逻辑,发现有在循环里面进行数据库的查询操作,导致了接口响应时间过长.
优化思路:
原代码是这样的:遍历了身份证之后拿着身份证一个一个的去查人员信息.
for(String pin : pidList){
userMapper.selectOne(newLambadaQueryWapper().euqal(User::getPid,pid))
//逻辑业务
}
优化可以一次查询出来,然后用stream并行流(数据量大用并行流更快)转成一个map,key是身份证号码,value是人员信息对象
Map<String, Person> idCardToPersonMap = personList.parallelStream()
.collect(Collectors.toMap(Person::getPid, Function.identity()));
for(String pid : pids){
Person getByPid = idCardToPersonMap.get(pid);
//处理业务逻辑
}