当前位置: 代码网 > it编程>编程语言>Java > Mybatis批量插入和批量更新失败问题

Mybatis批量插入和批量更新失败问题

2024年08月19日 Java 我要评论
背景mybatis在执行批量插入(方式二)和批量更新操作时,如果连接参数allowmultiqueries=false(默认),会批量操作失败,而且sql语句copy出来运行正常报错如下图:如何解决此

背景

mybatis在执行批量插入(方式二)和批量更新操作时,如果连接参数allowmultiqueries=false(默认),会批量操作失败,而且sql语句copy出来运行正常

报错如下图:

如何解决此类问题

在设置数据库连接时,添加allowmultiqueries=true

spring:
    datasource:
        url: jdbc:mysql://localhost:3306/db-test?allowmultiqueries=true

allowmultiqueries 参数

allowmultiqueries 是 mysql 数据库连接参数之一,用于指示是否允许在单个查询中执行多个 sql 语句。

如果设置为 true,则允许执行多个 sql 语句,以分号 ; 分隔。

这在某些情况下可能会导致安全风险,因为它可能会受到 sql 注入攻击的影响。

因此,默认情况下,allowmultiqueries 通常被设置为 false,以提高安全性。

mybatis批量插入

方式一,单条sql插入,allowmultiqueries=false,不会报错

void batchinsert(@param("list") list<userinfo> list);
<insert id="batchinsert">
     insert into t_user_info
     <trim prefix="(" suffix=")" suffixoverrides=",">
         <if test="list[0].username != null">
             username,
         </if>
         <if test="list[0].pwd != null">
             pwd,
         </if>
         <if test="list[0].createtime != null">
             create_time,
         </if>
     </trim>
     values
     <foreach collection="list" item="item" index="index" separator=",">
         <trim prefix="(" suffix=")" suffixoverrides=",">
             <if test="item.username != null">
                 #{item.username},
             </if>
             <if test="item.pwd != null">
                 #{item.pwd},
             </if>
             <if test="item.createtime != null">
                 #{item.createtime},
             </if>
         </trim>
     </foreach>
 </insert>

方式二,多条sql插入,allowmultiqueries=false,会报错

void batchinsert(@param("list") list<userinfo> list);
<insert id="batchinsert">
    <foreach collection="list" item="item" index="index" separator=";">
        insert into t_user_info
        <trim prefix="(" suffix=")" suffixoverrides=",">
            <if test="item.username != null">
                username,
            </if>
            <if test="item.pwd != null">
                pwd,
            </if>
            <if test="item.createtime != null">
                create_time,
            </if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixoverrides=",">
            <if test="item.username != null">
                #{item.username},
            </if>
            <if test="item.pwd != null">
                #{item.pwd},
            </if>       
            <if test="item.createtime != null">
                #{item.createtime},
            </if>
        </trim>
    </foreach>
</insert>

mybatis批量更新,allowmultiqueries=false,会报错

void batchupdate(@param("list") list<userinfo> list);
<update id="batchupdate">
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update t_user_info
        <set>
            <if test="item.username != null">
                username = #{item.username},
            </if>
            <if test="item.pwd != null">
                pwd = #{item.pwd},
            </if>
            <if test="item.updatetime != null">
                update_time = #{item.updatetime},
            </if>
        </set>
        where id = #{item.id}
    </foreach>
</update>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com