Java开发中会出现一种情况,就是
使用mybatis 的in语句的时候,in语句里面的数组大小不能大于1000.
可以通过以下方法解决:
对于一个List ids 大小大于1000的list而言,
使用getSumArrayList方法,获取List> 对象
List> idParams = shareEpdService.getSumArrayList(idParam);
在sql语句中in后面参数的长度一般都有限制。
解决办事就是拆分,其实就是将select * from table where id in (。。超过1000。),改为select * from table where id in(少于1000)or id in(少于1000)
xml配置
<select id="searchCalculationResultInfo" resultType...
今天尝试了调查一个问题:Mybatis传入oracle的in参数,运行。
案例示例:前端复选,带入要删除的id参数,逗号分隔,后端删除。
分析:除了list循环删除(代码循环或数据库循环)那类方式,有没有更直接的方法,拼装in条件。
过程:找了些资料,很多说是用存储过程和动态SQL,终于查到了一个可用方式。
操作实例:
UPDATE GK_CONFLICT_HANDLING --表名
SET DE...
<
foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item}
</
foreach>
其中,collection属性指定要循环遍历的集合或数组,item属性指定当前遍历到的元素,index属性指定当前元素的索引,open属性指定循环开始时的字符串,separator属性指定每个元素之间的分隔符,close属性指定循环结束时的字符串。
在
SQL语句中
使用foreach标签时,可以
使用${}或#{}来替代参数,例如:
SELECT * FROM table WHERE id IN
<
foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item}
</
foreach>
这样,
MyBatis会自动将集合或数组中的元素替换成
SQL语句中的参数。