Mybatis批量插入和批量更新失敗問(wèn)題
背景
Mybatis在執(zhí)行批量插入(方式二)和批量更新操作時(shí),如果連接參數(shù)allowMultiQueries=false(默認(rèn)),會(huì)批量操作失敗,而且sql語(yǔ)句copy出來(lái)運(yùn)行正常
報(bào)錯(cuò)如下圖:

如何解決此類問(wèn)題
在設(shè)置數(shù)據(jù)庫(kù)連接時(shí),添加allowMultiQueries=true
spring:
datasource:
url: jdbc:mysql://localhost:3306/db-test?allowMultiQueries=trueallowMultiQueries 參數(shù)
allowMultiQueries 是 MySQL 數(shù)據(jù)庫(kù)連接參數(shù)之一,用于指示是否允許在單個(gè)查詢中執(zhí)行多個(gè) SQL 語(yǔ)句。
如果設(shè)置為 true,則允許執(zhí)行多個(gè) SQL 語(yǔ)句,以分號(hào) ; 分隔。
這在某些情況下可能會(huì)導(dǎo)致安全風(fēng)險(xiǎn),因?yàn)樗赡軙?huì)受到 SQL 注入攻擊的影響。
因此,默認(rèn)情況下,allowMultiQueries 通常被設(shè)置為 false,以提高安全性。
Mybatis批量插入
方式一,單條SQL插入,allowMultiQueries=false,不會(huì)報(bào)錯(cuò)
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,會(huì)報(bào)錯(cuò)
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,會(huì)報(bào)錯(cuò)
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>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
談?wù)凥ashmap的容量為什么是2的冪次問(wèn)題
這篇文章主要介紹了談?wù)凥ashmap的容量為什么是2的冪次問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
Java將List轉(zhuǎn)換為String的幾種方式
我們大家在實(shí)際開(kāi)發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,下面這篇文章主要給大家介紹了關(guān)于Java將List轉(zhuǎn)換為String的幾種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Spring Boot 與 Kotlin 上傳文件的示例代碼
這篇文章主要介紹了Spring Boot 與 Kotlin 上傳文件的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
spring boot使用thymeleaf為模板的基本步驟介紹
Spring Boot項(xiàng)目的默認(rèn)模板引擎是Thymeleaf,這沒(méi)什么好說(shuō)的,個(gè)人覺(jué)得也非常好,下面這篇文章主要給大家介紹了關(guān)于spring boot使用thymeleaf為模板的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
SpringBoot中調(diào)用通用URL的實(shí)現(xiàn)
在 Spring Boot 應(yīng)用程序中,有時(shí)候我們需要調(diào)用一些通用的 URL 接口,本文主要介紹了SpringBoot中調(diào)用通用URL的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
javaweb實(shí)戰(zhàn)之商城項(xiàng)目開(kāi)發(fā)(一)
這篇文章主要針對(duì)javaweb商城項(xiàng)目開(kāi)發(fā)進(jìn)行實(shí)戰(zhàn)演習(xí),對(duì)javaweb商城項(xiàng)目開(kāi)發(fā)進(jìn)行詳細(xì)分析,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02
Java讀取properties配置文件時(shí),出現(xiàn)中文亂碼的解決方法
下面小編就為大家?guī)?lái)一篇Java讀取properties配置文件時(shí),出現(xiàn)中文亂碼的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
Java實(shí)戰(zhàn)項(xiàng)目 圖書(shū)管理系統(tǒng)
這篇文章主要介紹了使用java SSM jsp mysql maven設(shè)計(jì)實(shí)現(xiàn)的精品圖書(shū)管理系統(tǒng),是一個(gè)很好的實(shí)例,對(duì)大家的學(xué)習(xí)和工作具有借鑒意義,建議收藏一下2021-09-09
解決eclipse中maven引用不到已經(jīng)存在maven中jar包的問(wèn)題
這篇文章主要介紹了解決eclipse中maven引用不到已經(jīng)存在maven中jar包的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10

