开始的时候是查询列表方法用到了MP,在构建查询条件之后因为做了权限,如果没有权限直接抛出了自定义异常,然后前端测试了一下可行,但是多次抛出异常后就出现其它问题了,后面只要用到mapper.selectOne的方法都会报下面这个错,很奇怪不知道是不是因为这个原因导致的
为了更明显,然后我直接在这个方法抛异常,前端调了几次没问题,但是第9还是第10次的时候,只要后面走了mapper.selectOne方法都会报错,即使是第二个抛出异常参数设置是false也会抛出异常mapper.selectOne(xxx, false)
下面是测试代码,同样复现了,就简单的查询列表,执行几次抛出异常,然后传了74走到selectOne报错了,实体类字段就省略了
@Override
public List<BaseMainFileVo> getFileList(BaseMainFileDto baseMainFileDto) {
Long deptId = baseMainFileDto.getDeptId();
if (deptId == 74) {
LambdaQueryWrapper<BaseMainFile> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(BaseMainFile::getFileId, 1);
BaseMainFile file = baseMainFileMapper.selectOne(queryWrapper, false);
System.err.println(file);
} else {
throw new CommonException(CommonExceptionTypeEnum.CODE_NO_DATA_FOUND);
}
List<BaseMainFileVo> collect = new ArrayList<>();
return collect;
}
### Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
### The error may exist in com/xxx/BaseMainFileMapper.java (best guess)
### The error may involve com.xxx.BaseMainFileMapper.selectList_COUNT
### The error occurred while handling results
### SQL: SELECT count(0) FROM base_main_file WHERE (file_id = ?)
### Cause: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
### The error may exist in com/xxx/BaseMainFileMapper.java (best guess)
### The error may involve com.xxx.BaseMainFileMapper.selectList_COUNT
### The error occurred while handling results
### SQL: SELECT count(0) FROM base_main_file WHERE (file_id = ?)
### Cause: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName(value="base_main_file")
public class BaseMainFile extends DataScopeBase implements Serializable {
private static final long serialVersionUID = -1480328263191798648L;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class DataScopeBase implements Serializable {
private static final long serialVersionUID = 4821439115640123L;
}
看了你下面的描述,你前面用了pageHelper,即使后续跳过了sql执行,但是后面触发执行的第一条sql还是会做分页查询,这就出问题了,你可以抛出异常前手动清除Threadlocal中的数据就行了,
但是这种我个人觉得也太行,谁知道会不会影响到别的地方,新版的pageHepler已经支持在mapper层加入page参数,不需要以前那种startPage的处理了,那种就可以完美解决这个问题