问题描述:
mybatis-plus插入或更新时,如果传过来空字符串(“”),mybatis-plus也会将其当作数值插入到数据库中,此时数据库中该字段的值就是“”,而不是null,当该字段是唯一值但又不是必须值时,下次再插入一个空值就会报错(提示重复值,无法插入),而且它的空值也会写入sql中,影响性能。
如何解决这个问题?
就是要更改字段插入或更新的策略,可以在配置文件中全局设置,也可以在实体类(只能是在实体类,不能在vo或其他类中设置)中单独设置,具体如下:
mybatis-plus插入或更新的字段有空字符串或者null
fieldstrategy 有三种策略:
- ignored:忽略 (不插入该字段)
- not_null:非 null,默认策略(无法判断空字符串"")
- not_empty:非空(空字符串""也可判断)
- 还有两种是: default(默认就是not_null)、never(从不)
当用户有更新字段为 空字符串 或者 null 的需求时,需要对 fieldstrategy 策略进行调整:
方式一:调整全局的验证策略
注入配置 globalconfiguration 属性 fieldstrategy
mybatis-plus:
global-config:
#字段策略 0:"忽略判断",1:"非 null 判断",2:"非空判断"
field-strategy: 0新版看如下设置:
mybatis-plus:
global-config:
db-config:
id-type: auto #设置主键自增
# not_empty、not_null、default、ignored、never
insert-strategy: not_empty #插入策略
update-strategy: not_empty #更新策略方式二:调整字段验证注解
根据具体情况,在需要更新的字段中调整验证注解,如验证非空:
@tablefield(strategy=fieldstrategy.not_empty)
新版如下:
一定是在实体类中设置
@data
@tablename("users")
@apimodel(value="usersentity对象", description="用户表")
public class usersentity implements serializable {
/**
* insertstrategy 是插入策略,updatestrategy是更新策略;not_empty非空,可以检查空字符串""
*/
@tablefield(insertstrategy = fieldstrategy.not_empty,updatestrategy = fieldstrategy.not_empty)
@apimodelproperty(value = "手机")
private string phone;
}
方式三:使用 updatewrapper (3.x)
使用以下方法来进行更新或插入操作:
注:(暂未经过实际测试,自己摸索)
//updateallcolumnbyid(entity) // 全部字段更新: 3.0已经移除
mapper.update(
new user().setname("mp").setage(3),
wrappers.<user>lambdaupdate()
.set(user::getemail, null) //把email设置成null
.eq(user::getid, 2)
);
//也可以参考下面这种写法
mapper.update(
null,
wrappers.<user>lambdaupdate()
.set(user::getage, 3)
.set(user::getname, "mp")
.set(user::getemail, null) //把email设置成null
.eq(user::getid, 2)
);
到此这篇关于mybatis-plus插入或更新时空值不操作的文章就介绍到这了,更多相关mybatisplus空值不操作内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论