开发者

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

开发者 https://www.devze.com 2023-04-26 10:28 出处:网络 作者: Java小白笔记
目录项目场景:问题描述:原因分析:解决方案:方式一:调整全局的验证策略,如下:方式二:【推荐】调整字段验证注解方式三:使用 UpdateWrapper (3.x)总结MyBATis-Plus将js字段设置为null
目录
  • 项目场景:
  • 问题描述:
  • 原因分析:
  • 解决方案:
    • 方式一:调整全局的验证策略,如下:
    • 方式二:【推荐】调整字段验证注解
    • 方式三:使用 UpdateWrapper (3.x)
  • 总结

    MyBATis-Plus将js字段设置为null

    项目场景:

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

    问题描述:

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

    原因分析:

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

    • IGNORED:忽略。不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值会更新为null;
    • NOT_NULL:非 NULL,默认策略。也就是忽略null的字段,不忽略"";
    • NOT_EMPTY:非空。为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库;

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

    解决方案:

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

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

    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:"非空判断"
    python    field-strategy: 0
        #驼峰下划线转换
        db-column-underline: true
        #刷新mapper 调试神器
        refresh-mapper: true
        #数据库大写下划线转换
        #capital-mode: true
      configuration:
        map-underscore-to-camel-caspythone: true
        cache-enabled: true
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    

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

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

    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStra开发者_Python培训tegy.IGNORED)
    private String name;
    
    或者单个的例子:
    
    @TableField(u编程客栈pdateStrategy = 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)
    );

    总结

    到此这篇关于Mybatis-Plus将字段设置为null的文章就介绍到这了,更多相关Mybatis-Plus字段设置null内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号