当前位置: 首页 > article >正文

mapper.xml传入参数为Map的正确做法

  1. 错误用法
    <update id="updatePropertiesBatch" parameterType="java.util.Map">
        <foreach collection="codePropertiesMap.entrySet()" item="entry" separator=",">
            update payment_channel
            set properties = #{entry.value}
            where code = #{entry.key}
        </foreach>
    </update>

这样会报错:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'key' in 'class java.lang.String'

	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
	at com.sun.proxy.$Proxy74.update(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287)
	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:65)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:96)
	at com.sun.proxy.$Proxy75.updatePropertiesBatch(Unknown Source)
  1. 正确用法
    <update id="updatePropertiesBatch" parameterType="java.util.Map">
        <foreach collection="codePropertiesMap" item="value" index="key"  separator=";">
            update payment_channel
            set properties = #{value}
            where code = #{key}
        </foreach>
    </update>

使用批量更新需要加入allowMultiQueries=true

  1. 批量更新–没有设置allowMultiQueries=true时
<update id="updatePropertiesBatch" parameterType="java.util.Map">
        UPDATE payment_channel
        SET properties = CASE code
        <foreach collection="codePropertiesMap" index="key" item="value" separator=" " open="" close="">
            WHEN #{key} THEN #{value}
        </foreach>
        ELSE properties -- 如果没有匹配的code,则保持原值不变
        END,
        update_time = NOW() -- 更新时间戳
        WHERE code IN
        <foreach collection="codePropertiesMap" index="key" open="(" separator="," close=")">
            #{key}
        </foreach>
    </update>

http://www.kler.cn/a/443073.html

相关文章:

  • 12. C语言 数组与指针(深入理解)
  • C#Halcon找线封装
  • Linux web服务器
  • AI多模态技术介绍:视觉语言模型(VLMs)指南
  • 2024年华为OD机试真题-判断一组不等式是否满足约束并输出最大差-Python-OD统一考试(E卷)
  • 使用ElasticSearch查询
  • springboot使用scoket
  • C#速成(文件读、写操作)
  • Vite打包后动态路由加载失败的问题
  • springboot集成h2数据库并使用多数据源
  • AG32 IDE 开发环境搭建
  • 大模型微调---Prompt-tuning微调
  • spring\strust\springboot\isp前后端那些事儿
  • C# 中的Task
  • YOLOv5-7.0训练过程中出现报错Example: export GIT_PYTHON_REFRESH=quiet
  • 在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色,它是JVM执行引擎的核心组成部分之一。
  • Java开发者的神经网络进阶指南:深入探讨交叉熵损失函数
  • 【Linux基础】基本开发工具的使用
  • Spring Cloud Sleuth 分布式链路追踪入门
  • 【数字化】华为数字化转型架构蓝图
  • jenkins+docker部署springboot+vue项目
  • 【自动化】Python SeleniumUtil 油猴 工具 自动安装用户脚本
  • OceanBase 数据库分布式与集中式 能力
  • 【使用LLM搭建系统】1语言模型,提问范式与 Token
  • MySQL创建及增删改查
  • VisionPro 机器视觉控件篇 之 CogBlobTool 斑点工具