Mybatis-plus更新字段update_by失败问题

 更新时间:2024年09月23日 09:23:49   作者:꧁এ悲宸๓₯㎕  
在遇到实体类字段更新不正确的问题时,首先复现问题,确定受影响的字段,使用Debug模式查看变量的实际赋值情况,通过查看执行的SQL语句,确认SQL是否正确反映了预期的更新,如出现问题,可以参考Mybatis-plus官网的解决方案

问题复现

1、实体类字段

@TableField(value = "update_by",updateStrategy = FieldStrategy.IGNORED)
private String updateBy;

2、Debug查看原因

3、查看执行 sql

==>  Preparing: UPDATE t_inlay SET inlay_identity=?, document_num=?, inlay_code=?, inlay_name=?, production_plant_id=?, production_plant_name=?, production_network_id=?, production_network_name=?, create_by=?, create_id=?, update_id=?, create_time=?, update_by=?, update_time=? WHERE id=? AND del_flag='0' 
==> Parameters: 8a8ad19f8d4394b9018d4394b9070000(String), GEM20240126102356000125(String), 1035(String), wang-test233(String), 130001(String), 东莞美和珠宝(String), 13(String), 外协工厂(String), wang(String), 1750704368974766082(String), 1750704368974766082(String), 2024-01-26 10:23:57.0(Timestamp), 930225(String), 2024-01-26 14:33:55.564(Timestamp), 25(Integer)
<==    Updates: 1

根据执行的 sql 语句也可以看到,这里并没有更新赋值的当前登录人的 昵称

4、查 mp 的 官网

解决方案

使用 LambdaUpdateWrapper 来代替 updateById ,并在 LambdaUpdateWrapper 里面直接进行赋值

案例:

    LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
    LambdaUpdateWrapper<Entity> wrapper = new LambdaUpdateWrapper<>();
    wrapper.eq(Entity::getUuid, inlay.getUuid());
    // 这里自己指定字段的复制,不走 mp 的填充策略
    wrapper.set(Entity::getUpdateBy, loginUser.getRealname());
    inlay.setUpdateTime(new Date());
    inlay.setUpdateBy(loginUser.getRealname());
    inlay.setUpdateId(loginUser.getId());
    // entity 是查询出的数据库信息实体类
    entityMapper.update(entity, wrapper);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot拦截器和过滤器实例解析

    Spring Boot拦截器和过滤器实例解析

    这篇文章主要介绍了Spring Boot拦截器和过滤器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java中数组的定义和使用教程(三)

    Java中数组的定义和使用教程(三)

    这篇文章主要给大家介绍了关于Java中数组的定义和使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • springboot中application.yml多环境生效规则说明

    springboot中application.yml多环境生效规则说明

    这篇文章主要介绍了springboot中application.yml多环境生效规则说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Springcloud之Gateway组件详解

    Springcloud之Gateway组件详解

    Spring Cloud Gateway是Spring Cloud微服务生态下的网关组件。Spring Cloud Gateway是基于Spring 5和Spring Boot 2搭建的,本质上是一个Spring Boot应用。本文详细介绍了SpringCloud的网关组件 Gateway,,需要的朋友可以参考下
    2023-05-05
  • 使用JPA自定义SQL查询结果

    使用JPA自定义SQL查询结果

    这篇文章主要介绍了使用JPA自定义SQL查询结果,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring中获取Bean方法上的自定义注解问题解析

    Spring中获取Bean方法上的自定义注解问题解析

    这篇文章主要介绍了Spring中如何获取Bean方法上的自定义注解,基本的思路就是通过Spring提供的ApplicationContext#getBeansWithAnnotation+反射来实现,需要的朋友可以参考下
    2023-06-06
  • 如何使用HttpClient发送java对象到服务器

    如何使用HttpClient发送java对象到服务器

    这篇文章主要介绍了如何使用HttpClient发送java对象到服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringMVC中控制器返回JSON数据的实现

    SpringMVC中控制器返回JSON数据的实现

    本文主要介绍了SpringMVC中控制器返回JSON数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 一个简单的类加载器URLClassLoader案例

    一个简单的类加载器URLClassLoader案例

    这篇文章主要介绍了一个简单的类加载器URLClassLoader案例,这里写了一个小 demo,来加深对于反射的理解,需要的朋友可以参考下
    2023-04-04
  • Java如何跳出当前的多重嵌套循环的问题

    Java如何跳出当前的多重嵌套循环的问题

    Java中的循环结构包括for循环、while循环、do-while循环和增强型for循环,每种循环都有其适用场景,在循环中,break、continue和return分别用于跳出循环、跳过当前循环和结束当前方法,对于多重嵌套循环
    2025-01-01

最新评论