mybatis plus更新字段为null处理方法
时间:2022-11-11 09:44:39|栏目:JAVA代码|点击: 次
mybatis plus 将字段更新为 null,默认如果不做任何处理,使用 mybatis plus 自带的更新方法是不能将字段更新为 null 的,如果要将字段更新为 null,需要做下面的处理
在需要的字段上加 @TableField 注解,并设置属性
updateStrategy = FieldStrategy.IGNORED
测试代码如下
数据库表
实体类
package com.sbmp.bean; import java.time.LocalDate; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class Userinfo { /** * 主键id */ @TableId(type = IdType.AUTO) private Integer id; /**| * 姓名 */ private String name; /** * 生日 */ private LocalDate birthday; }
mapper
package com.sbmp.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sbmp.bean.Userinfo; public interface UserinfoMapper extends BaseMapper<Userinfo>{ }
controller
package com.sbmp.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.sbmp.bean.Userinfo; import com.sbmp.mapper.UserinfoMapper; @RestController public class UserinfoController { @Autowired private UserinfoMapper userinfoMapper; @RequestMapping("/info") public String info() { Userinfo info = new Userinfo(); info.setId(1); info.setBirthday(null); info.setName("薛宝钗"); userinfoMapper.updateById(info); return "成功"; } }
运行测试
看能不能将薛宝钗的生日更新为空
看打印的 sql 是没有birthday = null 的拼接的,这就是默认的情况
如果想拼接 birthday = null,需要在 birthday 字段上添加这个配置
@TableField(updateStrategy = FieldStrategy.IGNORED)
修改后的代码如下
package com.sbmp.bean; import java.time.LocalDate; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class Userinfo { /** * 主键id */ @TableId(type = IdType.AUTO) private Integer id; /**| * 姓名 */ private String name; /** * 生日 */ @TableField(updateStrategy = FieldStrategy.IGNORED) private LocalDate birthday; }
运行测试
这次 birthday = null 成功更新
@TableField 部分属性说明
看官方文档 updateStrategy 处理更新的情况;同理,添加的时候使用 insertStrategy;
涉及where条件处理使用 whereStrategy
FieldStrategy 说明