插入或更新的字段有 空字符串 或者 null
FieldStrategy 有三种策略:
- IGNORED:忽略
- NOT_NULL:非 NULL,默认策略
- NOT_EMPTY:非空
当用户有更新字段为 空字符串 或者 null
的需求时,需要对 FieldStrategy
策略进行调整:
方式一:调整全局的验证策略
注入配置 GlobalConfiguration 属性 fieldStrategy
application.yml
mybatis-plus:
global-config:
# 字段策略 0:忽略判断,直接拼SQL, 1:非NULL, 2:非空,3:默认;4:永远不加入SQL
field-strategy: 0
注意
这是全局配置,会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,可能会影响其他业务数据的正确性。
所以,尽量不要用此法。
方式二:调整字段验证注解
根据具体情况,在需要更新的字段中调整验证注解,如验证非空:
@TableField(strategy=FieldStrategy.NOT_EMPTY)
默认的字段策略会忽略掉,所以我们可以将要设置为null 的字段的策略更改下.例如;
@TableField(strategy = FieldStrategy.IGNORED)
private LocalDateTime offlineTime;
这样再次调用updateById,就ok了
由于做了这个更改,可能后续会有其他人误操作此表的时候,真的将这个字段不知情的情况下置为了null,可能造成严重事故!!!
方式三:使用 UpdateWrapper
(3.x)
使用以下方法来进行更新或插入操作:
LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(User::getOfflineTime,null); // 设置null updateWrapper.set(User::getContent,null); // 设置null updateWrapper.eq(User::getId,article.getId()); // 必须设置id,否则所有的数据都会被修改 userMapper.update(user, updateWrapper);
或者
userService.lambdaUpdate() .eq(User::getId, user.getId()) .set(User::getUserName, user.getUserName()) .set(User::getNickName, null) .update();
例子:根据Id主键更新User这个对象,其中email由前端传参,如果不传、空字符串或者传null,则更新该字段为null;
// 插入或更新的字段有 空字符串 或者 null LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>(); // 设置更新的记录id,缺少这个会更新所有记录 wrapper.eq(User::getId, User.getId()); // 更新时字段值不传、为空字符串、为null可以更新 wrapper.set(User::getEmail, user.getEmail()); update(user,wrapper);
注:需要设置更新记录的id,否则会更新全部的记录;
分类:
Mybatis-Plus
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本