mybatis-plus 批量插入更新、操作

批量插入(注解方式实现)

代码示例

    @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,不小心改成服务器的,本机并没有改。导致本机测试一直失败,观看此文章的朋友要注意了