You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

资产信息更新:如何实现MyBatis非空字段更新避免图片被替换?

解决MyBatis更新资产图片时仅非空字段才更新的问题

开发资产信息更新页面,包含图片上传功能。目前遇到的问题是:已有图片的资产在更新时如果不更换图片,原有头像会被默认图片覆盖。核心需求很明确:只有当img和originImg不为空字符串时,才执行这两个字段的更新操作。

之前尝试用MyBatis的<choose>标签实现判断,但修改后的代码存在拼写错误和语法问题,导致方案无效。

问题代码分析

尝试的修改代码里有两处致命错误:

  • <when>标签的属性写错了,把test写成了tes
  • 嵌套了多余的<choose>标签,导致MyBatis解析SQL时出错

正确解决方案

用<if>标签更适合这种单条件判断场景,直接在SQL的SET块里针对img和originImg添加非空判断即可。同时要注意,判断条件需要同时校验null和空字符串(因为未上传图片时这两个参数会返回空字符串"")。

修正后的完整MyBatis更新语句如下:

<update id="update_hw" parameterType="java.util.Map">
    UPDATE ASSETINFO
    SET assetCode = #{assetCode},
        assetRegGb = #{assetRegGb},
        <choose>
            <when test="autoFlag != null">
                autoFlag = #{autoFlag},
            </when>
        </choose>
        rentalCode = #{rentalCode},
        rentalPrice = #{rentalPrice},
        receiveDate = #{receiveDate},
        rentalRtnDate = #{rentalRtnDate},
        item = #{item},
        <choose>
            <when test="telecom != null">
                telecom = #{telecom},
            </when>
        </choose>
        <choose>
            <when test="phnNum != null">
                phnNum = #{phnNum},
            </when>
        </choose>
        maker = #{maker},
        moName = #{moName},
        serial = #{serial},
        spec = #{spec},
        purpose = #{purpose},
        location = #{location},
        <if test="img != null and img != ''">
            img = #{img},
        </if>
        <if test="originImg != null and originImg != ''">
            originImg = #{originImg},
        </if>
        deleteYn = #{deleteYn},
        updateDate = sysdate()
    WHERE assetCode = #{beforeAssetCode}
      AND cpId = #{cpId}
      AND deleteYn = 'N'
</update>

补充说明

  • 用<if>替代<choose>是因为我们只需要做单一条件判断,<choose>更适合多选一的场景,用<if>更简洁直观。
  • 条件里同时判断!= null和!= ''是为了覆盖参数可能为null或者空字符串的两种情况,确保只有真正有图片数据时才更新字段。
  • 注意SQL语句里的逗号:每个<if>块里的字段语句后面带逗号,因为后面还有固定的deleteYn和updateDate字段,不会出现最后一个字段多逗号的语法错误。

内容的提问来源于stack exchange,提问作者JDANK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:05:30