MyBatis配置允许批量插入或更新数据

MyBatis配置allowMultiQueries=true允许使用foreach标签批量插入或更新数据

执行update更新操作:

xml 复制代码
<!-- 批量更新 -->
    <update id="updateBatchByKey" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" separator=";">
            UPDATE order_main_product
            <set>
                <if test="item.factoryId != null">factory_id = #{item.factoryId},</if>
                <if test="item.factoryCode != null and item.factoryCode != ''">factory_code = #{item.factoryCode},</if>
                <if test="item.factoryName != null and item.factoryName != ''">factory_name = #{item.factoryName},</if>
                <if test="item.orderId != null">order_id = #{item.orderId},</if>
                <if test="item.parentId != null">parent_id = #{item.parentId},</if>
                <if test="item.shipmentAmount != null and item.shipmentAmount != ''">shipment_amount =
                    #{item.shipmentAmount},
                </if>
                ......
            </set>
            WHERE id = #{item.id}
        </foreach>
    </update>

执行报错:

sql 复制代码
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE
	order_main_product
SET
	product_count = 1,
	delivery_time = '2024-08' at line 2

错误位置: line: 1

解决:更改jdbc配置,加上allowMultiQueries=true

yml 复制代码
url: jdbc:mysql://172.16.1.145:3306/new_crm?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true

在MySQL连接中设置allowMultiQueries=true允许在SQL语句后使用分号分隔,执行多个命令。

原因:

MyBatis默认情况下不允许批量插入或更新数据的原因是出于安全考虑。在许多情况下,数据的插入和更新都需要经过验证和控制,以确保数据的完整性和一致性。如果允许默认的批量操作,可能会导致不正确的数据插入或更新,从而影响应用程序的正常运行。

通过配置allowMultiQueries=true可以开启MyBatis的批量操作功能。这个配置项告诉MyBatis允许在单个数据库连接中执行多个SQL语句,从而实现批量插入或更新数据的功能。但是要注意,在开启批量操作之前,确保你已经了解并理解了可能引发的安全风险,并且在使用批量操作时要进行适当的验证和控制,以确保数据的完整性和安全性。

尽管 allowMultiQueries 可以用于某些情况下的方便性,但出于安全和性能的考虑,通常不建议在生产环境中启用它。

相关推荐
腻害兔5 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨8 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说11 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199411 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了12 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品12 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘12 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记13 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端