idea中使用了lombok插件,及maven做配置后,实体类使用注解配置,给写代码带来了极大的方便
maven引入依赖的配置:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
使用:
首先看看一个@builder注解帮你干了什么!!!
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = -1840831686851699943L;
/**
* 主键
*/
private Long id;
/**
* 用户名
*/
private String name;
/**
* 加密后的密码
*/
private String password;
/**
* 加密使用的盐
*/
private String salt;
/**
* 邮箱
*/
private String email;
/**
* 手机号码
*/
private String phoneNumber;
/**
* 状态,-1:逻辑删除,0:禁用,1:启用
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
/**
* 上次登录时间
*/
private Date lastLoginTime;
/**
* 上次更新时间
*/
private Date lastUpdateTime;
}
使用----注意:必须确保你的idea或者eclipse安装了lombok插件,不然你使用builder方法会爆红,注解也不会生效:
/**
* 测试保存
*/
@Test
public void saveUser() {
String salt = IdUtil.fastSimpleUUID();
User user = User.builder().name("testSave3").password(SecureUtil.md5("123456" + salt)).salt(salt).email("testSave3@xkcoding.com").phoneNumber("17300000003").status(1).lastLoginTime(new DateTime()).createTime(new DateTime()).lastUpdateTime(new DateTime()).build();
int i = userMapper.saveUser(user);
Assert.assertEquals(1, i);
}
lombok插件安装:
@builder相当于如下代码--当然你可以不使用注解在实体类中添加如下代码一样可行:
public User(String name, String password, String salt, String email, String phoneNumber, Integer status, Date createTime, Date lastLoginTime, Date lastUpdateTime) {
this.name = name;
this.password = password;
this.salt = salt;
this.email = email;
this.phoneNumber = phoneNumber;
this.status = status;
this.createTime = createTime;
this.lastLoginTime = lastLoginTime;
this.lastUpdateTime = lastUpdateTime;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
/**
* 用户名
*/
private String name;
/**
* 加密后的密码
*/
private String password;
/**
* 加密使用的盐
*/
private String salt;
/**
* 邮箱
*/
private String email;
/**
* 手机号码
*/
private String phoneNumber;
/**
* 状态,-1:逻辑删除,0:禁用,1:启用
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
/**
* 上次登录时间
*/
private Date lastLoginTime;
/**
* 上次更新时间
*/
private Date lastUpdateTime;
public Builder name(final String name) {
this.name = name;
return this;
}
public Builder salt(final String salt) {
this.salt = salt;
return this;
}
public Builder password(final String password) {
this.password = password;
return this;
}
public Builder email(final String email) {
this.email = email;
return this;
}
public Builder phoneNumber(final String phoneNumber) {
this.phoneNumber = phoneNumber;
return this;
}
public Builder status(final Integer status) {
this.status = status;
return this;
}
public Builder createTime(final Date createTime) {
this.createTime = createTime;
return this;
}
public Builder lastLoginTime(final Date lastLoginTime) {
this.lastLoginTime = lastLoginTime;
return this;
}
public Builder lastUpdateTime(final Date lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
return this;
}
public User build() {
return new User( name, password, salt, email, phoneNumber, status, createTime, lastLoginTime, lastUpdateTime);
}
}
lombok常用注解
- @Getter / @Setter
可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。
- @EqualsAndHashCode
默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
- @NonNull: 注解在属性上;标识属性是不能为空,为空则抛出异常。
- @Builder:使用builder模式创建对象
- @Slf4j :注解在类上;根据用户实际使用的日志框架生成log日志对象。
- @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
- @ToString:
生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。可以这样设置不包含哪些字段@ToString(exclude = "id") / @ToString(exclude = {"id","name"})。如果继承的有父类的话,可以设置callSuper 让其调用父类的toString()方法,例如:@ToString(callSuper = true)。
- @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,Lombok就无能为力了。
- @Data:
包含@ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@Getter
- @RequiredArgsConstructor:
注解在类上;会生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段@RequiredArgsConstructor(staticName = "of")会生成一个of()的静态方法,并把构造方法设置为私有的。
更多的请参见:https://projectlombok.org/features/index.html。