mybatis批量查询引发的血案
2024-09-03 05:11:45
mybatis提供了foreach语法用于所谓的批量查询,使用方式如下:
①、定义接口
/**
* 批量获取任务id列表对应的任务名称
* @param taskIdList:任务id列表
* @return :任务id,及对应的任务名称的列表信息
*/
List<Map<String, Object>> batchSelectTaskNameById(@Param("taskIdList") List<String> taskIdList);
②、xml中的实现
<select id="batchSelectTaskNameById" parameterType="list" resultType="map">
SELECT id,name
FROM tb_task
WHERE 1=1 AND id IN
<foreach collection="taskIdList" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</select>
项目中就按照如上方式进行了批量查询,在开发过程中未发现什么问题,正常使用,感觉还提高了代码运行效率。
但是问题出现在项目内测过程中,大概用户量仅达到几百,出现的状况是:涉及到该种方式批量查询信息的接口,时而效率正常几十毫秒而已,时而效率异常慢,感觉是被阻塞一样5秒到10秒左右。排除了是因为传入list过长的原因,仅传入长度3,4的列表也会出现上述问题。
解决办法:将查询内容的信息先在程序代码中处理,即将list列表拼接成sql语句字符串形式,直接将条件当做参数传入xml中。
这样处理后既可以正常稳定进行批量查询了。
所以项目中勿使用foreach方式去批量查询,切记,坑很深。
最新文章
- 【夯实PHP基础】UML序列图总结
- Redis从基础命令到实战之字符串类型
- <;?xml version=";1.0"; encoding=";utf-16";?>;. use different encoding
- 【转载】关于Linux Shell 特殊字符
- nopcommerce里面的@Html.Widget(";home_page_top";) 是什么?
- string,const char*,char*之间的相互转换
- [Android Pro] 内容提供者ContentProvider的基本使用
- Netdom query基本用法
- C# DateTime 日期加1天 减一天 加一月 减一月 等方法(转)
- Fragment 整个生命周期
- django 项目部署在 Apache 后, 设置二级域名(Apache虚拟主机 、 万网二级域名设置)
- 【IOS】关于CGTransform的几个动画
- C++开源代码项目汇总
- netty&mdash;&mdash;私有协议栈开发案例
- session统计在线人数
- display:table 表格布局
- 818C.soft thief
- springMVC实现登陆
- [Android] Android 类似今日头条顶部的TabLayout 滑动标签栏 效果
- pycharm运行Django发生AppRegistryNotReady: Apps aren&#39;t loaded yet.