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'">
我是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'">