Mybatis-Plus将字段设置为null没起作用怎么解决

其他教程   发布日期:2025年04月08日   浏览次数:95

这篇文章主要介绍了Mybatis-Plus将字段设置为null没起作用怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mybatis-Plus将字段设置为null没起作用怎么解决文章都会有所收获,下面我们一起来看看吧。

    项目场景:

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

    问题描述:

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

    原因分析:

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

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

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

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

    默认的是

    1. NOT_NULL
    ,也就是忽略null字段,所以更新不成功。

    解决方案:

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

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

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

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

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

    1. @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
    2. private String name;
    3. 或者单个的例子:
    4. @TableField(updateStrategy = FieldStrategy.IGNORED)
    5. private String username;

    方式三:使用 UpdateWrapper (3.x)

    使用以下方法来进行更新或插入操作:

    1. //updateAllColumnById(entity) // 全部字段更新: 3.0已经移除
    2. mapper.update(
    3. new User().setName("mp").setAge(3),
    4. Wrappers.<User>lambdaUpdate()
    5. .set(User::getEmail, null) //把email设置成null
    6. .eq(User::getId, 2)
    7. );
    8. // 也可以参考下面这种写法
    9. mapper.update(
    10. null,
    11. Wrappers.<User>lambdaUpdate()
    12. .set(User::getAge, 3)
    13. .set(User::getName, "mp")
    14. .set(User::getEmail, null) // 把email设置成null
    15. .eq(User::getId, 2)
    16. );

    以上就是Mybatis-Plus将字段设置为null没起作用怎么解决的详细内容,更多关于Mybatis-Plus将字段设置为null没起作用怎么解决的资料请关注九品源码其它相关文章!