【Lombok】lombok已知的坑,记录
关于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 造成的翻车事故,太坑了!)