乌龙!mybatis-plus的@TableId注解不生效,原来竟是因为它!

这篇具有很好参考价值的文章主要介绍了乌龙!mybatis-plus的@TableId注解不生效,原来竟是因为它!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【先来个小测试】

大家觉得下面的sql返回什么?

select * from table1 where null=1

 文章来源地址https://www.toymoban.com/news/detail-747586.html

答案:无返回。因为null=1是个false的表达式。这就像我们写where 1=2一样。

 

【↓↓正文开始↓↓】

本次迭代的需求开发完成,将开发分支merge到test分支,部署测试环境提测后,QA提了一个bug,附下面log截图。

乌龙!mybatis-plus的@TableId注解不生效,原来竟是因为它!


通过logtrace排查程序,定位到如下代码。代码很简单,调用mybatis-plus的getById函数按主键查询数据。PayMerchantBankCardFlow这个实体类里在主属性上有标记@TableId,况且这个实体类在本次开发迭代中并未改动。那么,今天,mybatis-plus底层拼接sql时,怎么没有把主键字段拼出来呢?

PayMerchantBankCardFlow bankCardFlow = payMerchantBankCardFlowManager.getById(cardBindDTO.getFlowNo());

 

@TableName(value = "pay_merchant_bankcard_flow",autoResultMap = true)
public class PayMerchantBankCardFlow implements Serializable {

    private static final long serialVersionUID = 5112092241305418545L;

    /**请求流水号*/
    @JsonSerialize(using= ToStringSerializer.class)
    @TableId(type = IdType.ID_WORKER)
    private Long flowNo;

 

这确实令人费解!当时我在参加一个代码评审会,本着fixbug优先的原则,临时在PayMerchantBankCardFlowManager里重写了getById。然后发布让QA继续后续的功能测试。

public class PayMerchantBankCardFlowManager{

    @Override
    public PayMerchantBankCardFlow getById(Serializable id) {
        return getOne(Wrappers.query(new PayMerchantBankCardFlow().setFlowNo((Long) id)));
    }

 

bugfix就算完事了吗?不,作为靠谱的程序员,我们有必要刨根寻底查明原因。

一个小伙在本地通过junit测试,发现getById是没问题的。当然,凭借我们历往对mybatis-plus的掌握程度,这个@TableId必然不会有问题的。

但是结论呢?为什么本地没bug而测试环境有bug呢?

这时就考验技术人员的综合能力了。

还是组内的jason同学协助给破解了。

原来,在test分支里,PayMerchantBankCardFlow#flowNo的@TableId注解被别的开发分支给merge没了。这下就真相大白了。

最终修正PayMerchantBankCardFlow实体类,revert临时改动的代码,这个乌龙事件得以消停。

 

一个技术点:在springboot容器启动时,mybatis-plus会检查未设置@TableId的实体类。发现后会有WARN日志。2023-11-28 15:11:51.284 [TID:N/A] [] [main] WARN  c.b.mybatisplus.core.metadata.TableInfoHelper:? - Warn: Could not find @TableId in Class: com.emax.channel.provider.modules.paymerchantbankcardflow.entity.PayMerchantBankCardFlow.

 

 

 

 

 

到了这里,关于乌龙!mybatis-plus的@TableId注解不生效,原来竟是因为它!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis-Plus Page 分页不生效

    一、问题现象 使用 MyBatis-Plus 进行分页查询时,传入了 pageNum 和 pageSize,但是查询结果没有按照预期的效果返回。 二、问题原因 没有对 Mybatis-Puls 进行初始化,需要添加相应的配置类。 三、解决方案 在项目工程中创建 config 目录,在其中新建配置类 MyBatisPlusConfig.java 。 注意

    2024年02月12日
    浏览(44)
  • MyBatis和MyBatis-Plus常用注解(全是干货!)

    MyBatis中涉及到的所有注解 作用:标记查询语句。 @Select是MyBatis中的注解之一,用于标记查询语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Select注解时,需要在注解中指定SQL语句 试例: 作用:标记插入语句。 @Insert是MyBatis中的注解之一,用于标记插入

    2024年02月06日
    浏览(62)
  • Mybatis-Plus——05,乐观锁(新注解)

    乐观锁实现方式: 一、数据库添加一个字段 二、实体类添加@version注解 三、注册乐观锁插件 四、测试一下 4.1成功的乐观锁 version都是1 运行测试方法: 由1变为2 4.2失败的乐观锁 数据库的值为2 ———————— 创作不易,笔记不易,如觉不错,请三连,谢谢~~

    2024年03月09日
    浏览(65)
  • 【Mybatis-Plus】常见的@table类注解

    目录 引入Mybatis-Plus依赖 @TableName 当实体类的类名在转成小写后和数据库表名相同时 当实体类的类名在转成小写后和数据库表名不相同时 @Tableld @TableField 当数据库字段名与实体类成员不一致 成员变量名以is开头,且是布尔值  ​编辑 成员变量名与数据库冲突的时候 成

    2024年02月06日
    浏览(42)
  • 使用lombok注解导致mybatis-plus TypeHandler失效

    建立实体其中一个字段为枚举类 希望数据库存的时对应的数字 为了和数据库进行转换,使用了typeHandler 测试发现 插入/更新typeHandler生效,但是查询时在将数据库数据映射成java实体类的时候报错 设置的HotEventCreationMethodHandler并没有生效 我们知道,在不开启autoResultMap时,会导

    2024年02月07日
    浏览(46)
  • MyBatis-Plus 超详细笔记|配置使用|多种查询|常用注解

    Mybatis-Plus可以节省大量时间,所有的CRUD代码都可以自动化完成。 MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。其在 MyBatis 的基础上提供了很多方便的 CRUD 操作、分页查询、逻辑删除、自动填充等功能。 在Maven项目中,

    2024年02月05日
    浏览(48)
  • 如何利用Mybatis-Plus自动生成代码(超详细注解)

    1、简介 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性

    2024年02月01日
    浏览(46)
  • mybatis-plus使用this.baseMapper.update和updateById更新null值不生效

    mybatis-plus 在 serviceImpl 层可以直接使用 this.baseMapper.update 和 updateById , 如果更新的字段值是null,这时候需更新为 null 的字段更新不成功。打印的 sql 也没有更新为 null 的字段。 原因: 解决: 1)当需要设置可能为null的字段,需要用 lambdaUpdate() 使用方法为: 或者 实体类需更

    2024年02月13日
    浏览(45)
  • 2. 如何让mybatis-plus的逻辑删除注解@TableLogic临时失效

    1.1 controller代码 1.2 service层代码 1.3 entity代码 当我们正常调用接口时,sql查询日志为 数据库数据记录为: 接口调用结果为 可见逻辑删除注解已生效,is_del=1的小李没有查询出来 3.1 说明 我们让当前查询的逻辑删除失效时,不应影响其他查询活动,所以我们我们需要在线程上打

    2024年04月12日
    浏览(32)
  • SpringBoot+MyBatis-Plus多数据源@DS注解失效的解决方法

    引入 dynamic-datasource: application.yml 数据源配置: 详细使用请看 MyBatis-Plus官网 这种场景还是比较常见,比如在一个为master数据源的调用slave数据源就会失效 slave数据源Service方法 mater数据源Service方法调用slave数据源Service方法 这里会出现没有走slave_1,依然还是master数据源 需要在

    2024年01月18日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包