mybatis的xml ${item}总是更新失败
场景
代码如下
void updateStatus(@Param("deviceSerialIdCollection") Collection<String> deviceSerialIdCollection, @Param("status") Integer status);<update id="updateStatus">UPDATE gb_monitor SET online=#{status} WHERE device_serial IN<foreach collection="deviceSerialIdCollection" index="idx" item="item" separator="," open="(" close=")">${item }</foreach></update>
打印SQL,发现参数不是String,
UPDATEgb_monitor
SETonline=1
WHEREdevice_serial IN (44010200491320000001 , 44010200491320037168 , 44010200491320099664 , 44010200491320016436 );
结果发现,是 ${item}原因,改成#{item}就好了
MyBatis的${}
与#{}
区别
${item}
(当前写法)
直接拼接原始字符串到SQL中,不进行类型转换。若数据库字段定义为BIGINT
,MySQL会尝试隐式转换字符串为数字。#{item}
(推荐写法)
会通过PreparedStatement参数化传值,保留原始字符串类型。