一、场景

使用lombok@Data@Builder注解的实体类,在接受Mybatis的查询结果映射时,会出现数据问题。如下所示:

  • 实体类
    在这里插入图片描述

  • xml
    特别说明:xml里面的字段和数据库的字段顺序不一致在这里插入图片描述

  • 数据库
    在这里插入图片描述

  • 查询映射结果
    memo字段也映射上了安徽
    在这里插入图片描述

  • 调试跟踪
    此处的autoMapping的映射顺序是和xml中的sql一致的
    在这里插入图片描述

二、原因

当实体类只使用了 @Data@Builder注解后,会导致实体类不会生成空参构造方法,只会生成全参数构造方法,并且还是private修饰的,如下图:
在这里插入图片描述

因为使用的是全参数的构造方法,所以在对实体类进行赋值的时候,会导致SQL值和实体类的属性之间的映射的差异,导致对象中的数据与数据库的数据对应不上的问题。

三、解决方案

如果使用了lombok,则在实体类中加入全参、无参构造注解(@NoArgsConstructor@AllArgsConstructor)即可

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐