【问题标题】:How to execute update operation when MyBatis's passed parameter data type is java map?MyBatis传参数据类型为java map时如何执行更新操作?
【发布时间】:2019-08-14 01:15:34
【问题描述】:

我是mybatis的初学者,最近想用mybatis来执行一个更新操作。mybatis的参数日期类型是java map,map包含了数据库中所有我想更新的字段,比如用户名,年龄,密码,,,但是map的key不只是数据库的字段名而且我想用mybatis的foreach怎么办?

这里是mybatis sql mapper

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

【问题讨论】:

    标签: mybatis


    【解决方案1】:

    您的名为 param 的参数是 Map&lt;String, Object&gt;。要获取键的值,您必须将 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'">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 2016-04-25
      • 2018-11-19
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多