Mybatis批量查询拼装参数超长的解决办法

在使用Mybatis动态拼装查询参数时,执行过程中如果你的项目报错如下

Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。

uncategorized SQLException for SQL []; SQL state [S0001]; error code [8003]; 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。

问题很明显,就是拼装参数超过2100个参数,这是jdbc给出的错误,要解决这个问题

1、将传入的参数变为一个关联表或者子查询

例如:

select * from a
left join b on a.id = b.aid
...

2、或者使用in 子查询方式

select * from a
where a.id in (select aid from b)

3、将所有参数拼接在一起,作为一个参数传入

例如使用for循环将id逗号拼接起来,形成 1,2,3,4,5,6

Mybatis中参数使用${},而不用#{}

select * from a
where a.id in (${ids})