背景
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>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论