idea中lombok的常用注解使用及builder模式快速构建对象

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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值