извините за поздний ответ.
проблема в том, что вы вызвали batchSqlSession.selectList и использовали параметр напрямую, но в mybatis-plus (2.x) метод baseMapper.selectList (@Param ("ew") Wrapper ew), параметр имеет аннотацию @Param, которая будет обработана org.apache.ibatis.reflection.ParamNameResolver (строка 121 @ mybatis-3.4.6) и обернута как ParamMap.
Итак, разрешение простое:
некоторые изменения кода:
final Map<String, Object> param = new MapperMethod.ParamMap<Object>();
EntityWrapper<T> ew = new EntityWrapper<>(entityList.get(i));
param.put("ew", ew);
param.put("param1", ew);
final List<T> list = batchSqlSession.selectList(sqlStatement, param);
Полные коды, как показано ниже:
public List<T> listBatchByEntityList(List<T> entityList) {
try (final SqlSession batchSqlSession = sqlSessionBatch()) {
final int size = entityList.size();
final int batchSize = 30;
final List<T> result = new ArrayList<>();
for (int i = 0; i < size; i++) {
final String sqlStatement = sqlStatement(SqlMethod.SELECT_LIST);
final Map<String, Object> param = new MapperMethod.ParamMap<Object>();
EntityWrapper<T> ew = new EntityWrapper<>(entityList.get(i));
param.put("ew", ew);
param.put("param1", ew);
final List<T> list = batchSqlSession.selectList(sqlStatement, param);
result.addAll(list);
if (i >= 1 && i % batchSize == 0) {
batchSqlSession.flushStatements();
}
}
batchSqlSession.flushStatements();
return result;
} catch (Exception e) {
throw new GlobalException("Error: Cannot execute listBatchByEntityList Method. Cause", e);
}
}
проверено нормально.
Кстати, пожалуйста, не стесняйтесь ставить вопрос о https://github.com/baomidou/mybatis-plus/issues, независимо от ошибки, связанной с использованием mybatis-plus
С уважением
участника из Mybatis-plus:)