山东省工程建设管理协会网站适合30岁短期培训班
2026/4/18 3:12:34 网站建设 项目流程
山东省工程建设管理协会网站,适合30岁短期培训班,aspx网站服务器失去响应,怎么用小程序做微网站在 MyBatis-Plus 里#xff0c;更新 null 字段是一个非常常见、也非常容易踩坑的问题。 很多人会遇到这种情况#xff1a;我明明 setXxx(null) 了#xff0c;为什么数据库里还是原来的值#xff1f;下面我按 原因 → 解决方案 → 使用建议 来整理一下。一、为什么 MyBatis-…在MyBatis-Plus里更新null字段是一个非常常见、也非常容易踩坑的问题。很多人会遇到这种情况我明明setXxx(null)了为什么数据库里还是原来的值下面我按原因 → 解决方案 → 使用建议来整理一下。一、为什么 MyBatis-Plus 默认不更新 null这是MyBatis-Plus 的设计行为不是 bug。默认情况下TableField(updateStrategy FieldStrategy.NOT_NULL)也就是说字段为null就不会出现在 UPDATE 语句里目的是为了• 防止误操作把字段更新成null• 更符合大多数“只更新有值字段”的业务场景所以你写User user new User(); user.setId(1L); user.setEmail(null); userMapper.updateById(user);实际生成的 SQL 类似UPDATE user SET id ? WHERE id ?email根本没参与更新。二、更新 null 的几种正确方式重点方式一使用TableField(updateStrategy FieldStrategy.IGNORED)最推荐TableField(updateStrategy FieldStrategy.IGNORED) private String email;含义是不管是不是 null都参与 update这时user.setEmail(null); userMapper.updateById(user);生成 SQLUPDATE user SET email NULL WHERE id ?适合场景• 这个字段本来就允许被清空• 例如备注、头像、手机号、邮箱方式二在实体类级别统一策略TableName(value user, autoResultMap true) public class User { }配合全局配置不太常用可以了解mybatis-plus: global-config: db-config: update-strategy: ignored慎用• 会导致所有字段都能被更新为 null• 风险较大不适合复杂业务方式三使用UpdateWrapper最灵活如果你不想改实体类UpdateWrapperUser wrapper new UpdateWrapper(); wrapper.eq(id, 1L) .set(email, null); userMapper.update(null, wrapper);生成 SQLUPDATE user SET email NULL WHERE id ?适合场景• 后台管理• 批量操作• 精准控制 SQL方式四使用LambdaUpdateWrapperLambdaUpdateWrapperUser wrapper Wrappers.lambdaUpdate(); wrapper.eq(User::getId, 1L) .set(User::getEmail, null); userMapper.update(null, wrapper);类型安全、IDE 友好实际项目更推荐三、一个容易忽略的坑逻辑删除字段 更新 null如果你用了TableLogic private Integer deleted;一定要确认•Wrapper里有没有被逻辑删除条件影响• 有些更新失败其实是被逻辑删除过滤了

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询