我是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]
答案 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">