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 说明
至此完