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

  1. 错误用法
xml 复制代码
    <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. 正确用法
xml 复制代码
    <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时
xml 复制代码
<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>
相关推荐
我命由我123451 小时前
Android 项目依赖冲突问题:Duplicate class found in modules
android·xml·java·java-ee·android studio·android jetpack·android-studio
我命由我1234513 小时前
11-3.Android 项目结构 - 认识 .idea 目录
android·xml·java·java-ee·gitee·android jetpack·android runtime
whisperrr.15 小时前
【Javaweb05】 XML探秘:解码数据的哲学,构建跨界的沟通桥梁
xml
Suwg2092 天前
《手写Mybatis渐进式源码实践》实践笔记(第九章 细化XML语句构建器)
xml·java·笔记·mybatis
我命由我123452 天前
11-2.Android 项目结构 - themes.xml 文件基础解读
android·xml·java·java-ee·gitee·android jetpack·android runtime
wei8440678722 天前
在MyBatis的XML映射文件中,<trim>元素所有场景下的完整使用示例
xml·java·mybatis
yuren_xia3 天前
web.xml常用配置
xml·java·eclipse
weixin_438335403 天前
在 pom.xml 文件中指定 repositories
xml
!!!5253 天前
MyBatis-XML映射配置
xml·mybatis
_UMR_4 天前
XML反序列化
xml·java·开发语言