需求:要实现这样的语句,dao传参为(int,String)
<update id="status" >
update acct_member set status=1 where MemberID in (1,2,3)
</update>
但当你这样传参就会报参数不匹配:
<update id="status" >
update acct_member set status=#{arg0} where MemberID in (#{arg1})
</update>
第一种解决方法:
dao层传参为(int,String),将#改为$符合。
#和$的区别:
使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入;使用${}时的sql不会当做字符串处理,是什么就是什么,原样输出。
<update id="status" >
update acct_member set status=#{arg0} where MemberID in (${arg1})
</update>
第二种解决方法:
dao层传参为(int,List),动态SQL操作迭代一个集合
<update id="status" >
update acct_member set status=#{arg0} where MemberID in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>