【Lombok】lombok已知的坑,记录

发布时间 2023-06-01 10:46:09作者: aaacarrot

关于lombok

lombok 这个插件现在的使用率应该是很高的了,虽然偶尔也听说到有公司禁止使用lombok,说会存在什么样的问题,但耐不住它是真的香。
(主要是因为也不知道具体它存在什么样的坑,如果是明确的坑,绕得过就绕过就好了,绕不过就没办法了)

影响中说引入 lombok后,如果作为组件对外提供,就要强制使用方也引入lombok,太过霸道,如此一种说法来禁止使用lombok,在我们大多数项目上,这种说法多少也站不住脚,因为引入一下lombok能咋的!

直到今天看到关于lombok明确的一个坑,记录下来,看得到的坑,就不再让人害怕了。

具体如下:

关于lombok 的 Setter-Getter方法的坑

@Data
public class DemoDto{
    private String xName;

    ....其他属性
}

如果以上例子,DeomDto 有一个属性 xName, 首字母小写,第二个字母大写。
类似于这种情况,可能是会有坑的
因为:Lombok对于第一个字母小写,第二个字母大写的属性生成的get-set方法和Mybatis以及idea或者说是Java官方认可的get-set方法生成的不一样:

@Data
public class DemoDto{
    private String xName;

    ....其他属性
}

public class DemoApp {
    // 使用 @Data 注解生成的 get, set 方法, X 是大写的
    DemoDto xx = new DemoDto();
    xx.getXName();

    // 用idea生成的 get, set 方法, x 是大写的 (官方认可的方式就是 小写的,所以 Idea, mybatis 也是小写的)
    DemoDto xx = new DemoDto();
    xx.getxName();
}

以上,如果使用lombok注解,并且又使用 mybatis 入库数据。就会因为 get / set 方法不一致,导致数据写不进,或读不到。

坑,由此诞生。

知道坑在这里,绕过它就行了。
针对这种特殊一点的属性,用 idea 生成 get / set 方法就行了。其它还是可以用 lombok 的。

解决方案:

  • 1、修改属性名字,让第二个字母小写,或者说是规定所有的属性的前两个字母必须小写
  • 2、如果数据库已经设计好,并且前后端接口对接好了,不想修改,那就专门为这种特殊的属性使用idea生成get-set方法复制代码

参考文章: https://mp.weixin.qq.com/s/KV09pB_JHEkgun-u-NGijw (Lombok 造成的翻车事故,太坑了!)