MyBatis传入的参数数据类型为javamap时如何执行update操作?

How to execute update operation when MyBatis's passed parameter data type is java map?

我是mybatis的初学者,最近想用mybatis执行更新 operation.The mybatis的参数日期类型是 java map,map中包含了我想更新的所有字段database,like username,age,password,但是map的key不只是数据库的字段名,想用mybatis的foreach怎么办?

这里是mybatissql映射器

<update id="updateData" parameterType="map">
    UPDATE myDataBase SET
<foreach item="value" index="key " collection="param" separator=",">
    <if test="key != oldPageNo and key != oldNo">
         ${key}=#{value}
    </if>
</foreach>
    WHERE 
    ID = #{param[oldNo]} AND PAGE = #{param[oldPageNo]}
</update>

这是界面

 int updateData(@Param("param")Map<String, Object> param);

错误: 嵌套异常是 org.apache.ibatis.binding.BindingException:未找到参数 'oldPageNo'。可用参数为 [param, param1]

您的名为 param 的参数是 Map<String, Object>。要获取键的值,您必须将 String 传递到其 get(Object key) 方法中。

因此您必须更改以下内容

ID = #{param[oldNo]} AND PAGE = #{param[oldPageNo]}

ID = #{param['oldNo']} AND PAGE = #{param['oldPageNo']}

您还应该将 if-tag 中的比较从

更改为
<if test="key != oldPageNo and key != oldNo">

<if test="key != 'oldPageNo' and key != 'oldNo'">