1.现象
查出30000多条id
然后用
EntityWrapper ew = new EntityWrapper<>();
(TableFieldConstant.F_AUTH_RESULT_ID, ids);
查询会很慢
2 原因
跟了一下mybatis-plus源码
protected String formatSqlIfNeed(boolean need, String sqlStr, Object... params) {
if (need && !(sqlStr)) {
if ((params)) {
for(int i = 0; i < ; ++i) {
String genParamName = "MPGENVAL" + ();
sqlStr = (("{%s}", i), ("#{%.%s}", (), genParamName));
(genParamName, params[i]);
}
}
return sqlStr;
} else {
return null;
}
}
问题出现在
sqlStr = (("{%s}", i), ("#{%.%s}", (), genParamName));
对replace 测试 发现当数据量大时替换会很耗时 测试的遍历了30000次拼接从1到30000 替换耗时20多秒
对 apache-commons-lang 的测试是耗时7秒多
3总结
把使用mybaits 批量查询改为 手写sql查询 之后问题解决
使用mybatis-plus批量操作时要谨慎 能写sql尽量写sql
这个跟mybatis-plus 的小伙伴提了问题后已经解决 可以升级jar版本