Mybatis-Plus将字段设置为null解决方法

作者:Java小白笔记 时间:2023-04-11 08:18:55 

Mybatis-Plus将字段设置为null

项目场景:

最近在做一个需求的时候需要把数据库中的某个字段设置为空

问题描述:

在代码中通过set方法对一个字段设置成null,发现并没有起作用

原因分析:

经过查询是因为Mybatis-Plus默认的更新策略设置的问题,Mybatis-Plus中FieldStrategy有三种策略:

  • IGNORED:忽略。不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值会更新为null;

  • NOT_NULL:非 NULL,默认策略。也就是忽略null的字段,不忽略"";

  • NOT_EMPTY:非空。为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库;

默认的是NOT_NULL,也就是忽略null字段,所以更新不成功。

解决方案:

需对 FieldStrategy 策略进行调整,有如下三种方式:

方式一:调整全局的验证策略,如下:

mybatis-plus:
 mapper-locations: classpath:/mapper/**/*.xml
 typeAliasesPackage: com.test.application.test.admin.entity
 global-config:
   #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
   id-type: 0
   #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
   field-strategy: 0
   #驼峰下划线转换
   db-column-underline: true
   #刷新mapper 调试神器
   refresh-mapper: true
   #数据库大写下划线转换
   #capital-mode: true
 configuration:
   map-underscore-to-camel-case: true
   cache-enabled: true
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

方式二:【推荐】调整字段验证注解

Mybatis-Plus 版本3.1.2及以上,根据具体情况,在需要更新的字段中调整验证注解,如验证非空:

@TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
private String name;

或者单个的例子:

@TableField(updateStrategy = FieldStrategy.IGNORED)
private String username;

方式三:使用 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)
);

来源:https://blog.csdn.net/weixin_45285213/article/details/128861021

标签:mybatis-plus,字段,null
0
投稿

猜你喜欢

  • volatile与happens-before的关系与内存一致性错误

    2021-12-13 20:25:37
  • Java如何优雅替换if-else语句

    2023-02-23 10:30:27
  • SpringBoot绿叶显示yml和端口问题及解决方法

    2023-12-09 00:29:13
  • Java简单验证身份证功能示例

    2023-08-15 23:36:32
  • 聊聊java中引用数据类型有哪些

    2022-01-10 11:59:10
  • Maven继承与聚合详解及作用介绍

    2023-03-08 00:14:36
  • 使用SpringMVC的@Validated注解验证的实现

    2023-09-20 19:49:55
  • C语言实现BMP图像处理(哈夫曼编码)

    2022-10-08 02:04:02
  • 详解Java中对象池的介绍与使用

    2023-07-25 13:13:48
  • 通过Session案例分析一次性验证码登录

    2023-04-27 06:25:51
  • Android自定义View绘制的方法及过程(二)

    2023-05-02 14:42:17
  • Java 中 synchronized的用法详解(四种用法)

    2022-03-11 08:55:05
  • C#中的DateTime是值类型还是引用类型

    2023-08-07 17:54:17
  • Java 十大排序算法之插入排序刨析

    2021-12-07 02:48:54
  • C#端口扫描器的编写方法

    2023-12-17 17:47:24
  • Android设备与外接U盘实现数据读取操作的示例

    2023-06-18 13:35:00
  • java的基本数据类型及属性

    2021-08-10 19:31:49
  • springboot 正确的在异步线程中使用request的示例代码

    2023-11-24 22:36:13
  • 使用java生成字母验证码

    2021-10-29 23:50:25
  • Java实现新建有返回值的线程的示例详解

    2022-02-13 17:09:33
  • asp之家 软件编程 m.aspxhome.com