数据执行sql示例:select * from student where stu_id in ('10000','10002');
错误代码:
因为考虑oracle 里面 in 对1000长度的限制,所以选择list进行逐个入参,再以or将结果连接。
java代码拼接参数入参mybatis: list
list.add( '10000','10002','10003',.........'10500');
list.add( '10501','10502','10503',.........'11000');
.......
mapper sql
select * from student
<trim prefix="where" suffixOverrides="or">
<foreach collection="list" index="index" item="item" >
stu_id in (#{item}) or
</foreach>
</trim>
错误现象:后台打印sql与参数进行手动拼接,后进数据库查询正确。代码运行没有查询结果。
错误原因:mybatis 传参自动对单引号进行了转义。in后面括号内的参数传参不能拼接后传入,只能通过数组传入。
正确写法:
java直接将所有的值通过list传参
示例:list.add( '10000');
list.add( '100001');
……
list.add( '20000');
mapper sql
select * from student where
<foreach collection="list" index="index" item="item" open="(" close="))">
<if test="index != 0">
<choose>
<when test="index % 1000 == 999">) OR stu_id IN( </when>
<otherwise>,</otherwise>
</choose>
</if>
#{item}
</foreach>