MyBatis传递的参数数据类型为java map时如何执行更新操作?

时间:2019-08-13 02:26:05

标签: mybatis

我是mybatis的初学者,最近我想使用mybatis执行更新操作。mybatis的参数日期类型是java map,该map包含数据库中我要更新的所有字段,例如用户名,年龄,密码,但是地图的键不仅是数据库的字段名,而且我想使用mybatis的foreach我该怎么办?

这是mybatis sql映射器

<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]

1 个答案:

答案 0 :(得分:0)

您名为param的参数是function getIndex(array, value) { var index = array.findIndex(v => v >= value); return index !== -1 ? index : array.length; } const points = [.1, .2, .25, .6, .72, .9]; console.log(getIndex(points, .3)); // 3 console.log(getIndex(points, .9)); // 5 console.log(getIndex(points, 1)); // 6。要获取键的值,必须将Map<String, Object>传递到其String方法中。

所以您必须更改以下内容

get(Object key)

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

您还应该将if-tag中的比较更改为

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

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