批量插入(注解方式实现)
代码示例
@Insert("<script> " +
"insert into orders_item (sn, goods_id, goods_name, goods_price, num, goods_pic) values " +
"<foreach collection='ordersItems' item='oi' separator=',' > " +
"(#{oi.sn}, #{oi.goodsId}, #{oi.goodsName}, #{oi.goodsPrice}, #{oi.num}, #{oi.goodsPic}) "+
"</foreach> " +
"</script> ")
int saveOrderItemList(@Param("ordersItems") List<OrdersItem> ordersItems);
注意:
<foreach collection="ordersItem" item="item" index="index" open="" close="" separator=";">
1.采用注解的方式要加<script>标签对
2.@Param(“ordersItems”) 指定参数名,与collection值保持一致。collection指定要循环的集合
3.item:集合内的元素
4.separator:一次循环后sql之间的分隔符
5.open:用foreach包括的语句开始符号
6.close:用foreach包括的语句结束符号
批量更新:
@Update("<script> " +
"<foreach collection = 'ordersItem' item ='item' open='' close='' separator=';'> " +
"update goods " +
"set buy_count = buy_count + #{item.num} ," +
"quantity = quantity - #{item.num} " +
"where id = #{item.goodsId} " +
"</foreach> " +
"</script>")
Integer salesVolumeChange(@Param("ordersItem") List<OrdersItem> ordersItem);
我在执行时,发现单条语句是可以执行成功,多条执行就会报错
尝试1.
第一想法是我代码写的有问题(怎么可能是框架的问题,肯定自己的垃圾代码没搞好),毕竟刚用了批量插入,正常
我在检查代码后,没发现异常,改变策略,决定用xml的形式,代码一并粘贴,如下
<update id="salesVolumeChange" parameterType="java.util.List" >
<foreach collection="ordersItem" item="item" index="index" open="" close="" separator=";">
update goods
<set>
<if test="item.num != null">
buy_count = buy_count + #{item.num},
quantity = quantity - #{item.num}
</if>
</set>
where id = #{item.goodsId}
</foreach>
</update>
还是不行(代码无误)
去百度寻找破局办法
在连接数据库的url上加上allowMultiQueries=true参数
jdbc:mysql://localhost:3306/petshop?allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
完美解决
中间也经理波折,因为用了nacos,打开的有本机的nacos和服务器的nacos,不小心改成服务器的,本机并没有改。导致本机测试一直失败,观看此文章的朋友要注意了