Loading... 我以前用的foreach一般是这样的 ```xml <delete id="deleteByIds"> delete from tb_brand where id in <foreach collection="array" item="id" separator="," open="(" close=")"> #{id} </foreach> </delete> ``` 这条语句时没错的,我们使用`open="(" close=")"`,对最外层加上了括号。 但是今天我使用mybatis写一个批量查询如下语句(模拟的案例): ```xml <insert id="batchInsert" parameterType="java.util.List"> insert into twn_nms_app_fttx.t_branch_history_trend(id, kpi_utc_sec, sample_interval, location, active_devices, evt_devices, stream_devices, total_devices, http_bytes, dist_http_err_code, dist_video_type, dist_event, grn_devices, blue_devices, ylw_devices, red_devices) values <foreach collection="list" item="item" separator="," open="(" close=")"> null, #{item.kpiutCSec}, #{item.sampleInterval}, #{item.location}, #{item.activeDevices}, #{item.evtDevices}, #{item.streamDevices}, #{item.totalDevices}, #{item.httpBytes}, #{item.distHttpErrCode}, #{item.distVideoType}, #{item.distEvent}, #{item.grnDevices}, #{item.blueDevices}, #{item.ylwDevices}, #{item.redDevices} </foreach> </insert> ``` 结果就是,当插入一条时,能够成功运行,当插入多条时就会报错,看了十多分中没结果,去上厕所恍然大悟!!好几次都是去厕所想明白的😂 > 这个问题可能是由于在的`<foreach>`标签中,使用了逗号,作为分隔符。当你的列表只有一条数据时,这不会产生问题,因为只有一个值的集合被插入,没有逗号。但是,当列表有多条数据时,每个值的集合之间会被逗号分隔,并且每一条数据没有括号,只会在总的数据两边加上括号,这可能会导致SQL语句的格式错误。 所以正确的语句应该是: ```xml <insert id="batchInsert" parameterType="java.util.List"> insert into twn_nms_app_fttx.t_branch_history_trend(id, kpi_utc_sec, sample_interval, location, active_devices, evt_devices, stream_devices, total_devices, http_bytes, dist_http_err_code, dist_video_type, dist_event, grn_devices, blue_devices, ylw_devices, red_devices) values <foreach collection="list" item="item" separator=","> ( null, #{item.kpiutCSec}, #{item.sampleInterval}, #{item.location}, #{item.activeDevices}, #{item.evtDevices}, #{item.streamDevices}, #{item.totalDevices}, #{item.httpBytes}, #{item.distHttpErrCode}, #{item.distVideoType}, #{item.distEvent}, #{item.grnDevices}, #{item.blueDevices}, #{item.ylwDevices}, #{item.redDevices} ) </foreach> </insert> ``` > 总结:想不明白时去厕所摸鱼玩玩手机。 最后修改:2023 年 12 月 06 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏