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是枚举, 我们此处应传递枚举的值, 而不是将整个枚举传递进去, 否则会出现报错