ibatis处理in查询有关问题
ibatis处理in查询问题
在ibatis里面,由于使用的是preparedStatement,所以当遇到 in查询的时候,直接一个输入参数的做法是不正确的。
比如
使用ibatis处理in查询问题
这样当传一个id的时候当然不会有问题,但是如果是传多个id,并以“,”隔开,系统会抛出非法数字的错误。解决这个问题,只能使用动态sql
在sql-map中动态sql的关键字是$key$,那么上面这个问题就应该这样解决:
这样只要将用逗号隔开的id传进去就行了。
在ibatis里面,由于使用的是preparedStatement,所以当遇到 in查询的时候,直接一个输入参数的做法是不正确的。
比如
<parameterMap id="del" class="java.lang.String"> <parameter property="ids"> </parameterMap>
使用ibatis处理in查询问题
<delete id="delstm" parameterMap="del"> <![CDATA[ delete from yourtable where keyid in(#ids#) ]]> </delete>
这样当传一个id的时候当然不会有问题,但是如果是传多个id,并以“,”隔开,系统会抛出非法数字的错误。解决这个问题,只能使用动态sql
在sql-map中动态sql的关键字是$key$,那么上面这个问题就应该这样解决:
<delete id="delstm" parameterClass="java.lang.String"> <![CDATA[ delete from yourtable where keyid in($dis$) ]]> </delete>
这样只要将用逗号隔开的id传进去就行了。
1 楼
zhaoyashan
2012-02-01
你的方法,确实可以解决此问题,不过也会增加系统被入侵的可能,因为'$'这个符号会将传进来的值直接组合成查询语句,这样很容易被Sql注入攻击。所以我建议使用<iterate prepend="" property="ids" open="(" close=")" conjunction="," >
#ids[]#
</iterate> 这种方法来组合in查询语句。
#ids[]#
</iterate> 这种方法来组合in查询语句。