@builder,@NoArgsConstructor,@AllArgsConstructor,@Getter,@Setter注解—lombok注解遇到的问题

在开发过程中,lombok的使用极大的简化了实体类的开发工作。在通常情况下我们需要手动去建立getter和setter方法,构造函数之类的,而lombok的作用就是能够在我们编译源码的时候自动帮我们生成这些方法,这些都是通过注解的方式:如@builder,@NoArgsConstructor,@AllArgsConstructor,@Getter,@Setter,@data等等。

a.添加lombok的pom依赖:

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>0.10.2</version>
</dependency>

在idea编译器,可以在下载对应版本的lombok插件,这样项目中就可以对于实体类进行简化开发了。

b.@builder注解使用的问题:

@Builder声明实体,表示可以进行Builder方式初始化,@Value注解,表示只公开getter,对所有属性的setter都封闭,即private修饰,所以它不能和@Builder在一起用

(在我看来,就是相当于将对象的set方法简化,在业务需求开发中,如果set的情况较多就可以使用,这样可以提高代码简洁度,下面是我使用@builder的方法)

在实体类中加上@Builder注解,在service层即可使用:

//实质上,就是对象的setId(),setName()
Object object =object.builder().Id("123”).name(“张三”).build();

但是在使用JPA的findone方法的时候,报错:没有默认的构造器,我推测是因为在加上@builder使JPA的默认构造器失效了,因此查阅了资料发现lombok中存在两个关于默认构造器的注解:@NoArgsConstructor(自动生成无参数构造函数),@AllArgsConstructor(自动生成全参数构造函数),于是尝试着在实体类上加了这两个注解,果然在使用JPA时就不会报错了,所以建议在没有遇到set方法使用过于繁多的情况下就不要用这个@builder了,可能是与对象关系映射的持久层框架有冲突。

c.总结:lombok极大的提高了我们的开发效率,java语言日新月异,难免遇到各类问题,还是活到老,学到老为妙!

lombok也存在其他的很实用的注解,比如@Data: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor,技术很菜,希望可以多多学习!

posted @ 2019-07-17 19:00  故城归人  阅读(3619)  评论(0编辑  收藏  举报