Mybatis如何更新部分字段(patch)

2,098 阅读1分钟

1 起因

在实际开发中, 我们经常会遇到需要修改对象部分属性的情况, 例如:

修改任务的状态

有可能任务本身是个很庞大的对象, 我们不想先把所有字段查询出来然后再更新, 只希望更新状态这一个字段就好

2 解决方案

结合使用Mybatis的trim和if, 代码如下

update t_task
<trim prefix="set" suffixOverrides="," suffix=" where id = #{id}">
    <if test="status != null and status != ''"> 
        status=#{status}, 
    </if>
</trim>

对其中的几个属性进行说明:

  • prefix: 前缀, 会在trim拼接的SQL语句中最一开始出现一次

  • suffixOverrides: 间隔符, 但是会删除最后一个, 防止出现 "id = 1, status = 1, where..."这种情况

  • suffix: 后缀, 会在trim拼接的SQL语句最后出现一次

3 遇到的坑

在中, 实际开发的status是枚举, 我们此处应传递枚举的值, 而不是将整个枚举传递进去, 否则会出现报错