Lombok 利器去除冗余

一般来说我们建立一个实体像是以下

@Entity
public class Product {
    private Long id;
    private Integer price;
    private String name;
    public Product() {
    }
    public Product(String name, int price) {
        this.name = name;
        this.price = price;
    }
    ...
}

建立好之後,我们要让它被存取,因此都会使用 get、set 方式进行设定,当然还有建构方法甚至是 toString 这些很常的被使用,因此程序码有很多时间都在做这些事,不仅是代码过於冗长甚至浪费一些精力在这个地方。透过 Lombok 工具可以省下一些精力。

maven 引用 Lombok 方式

<dependencies>
    ...
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
        <scope>provided</scope>
    </dependency>
    ...
</dependencies>

透过 @Getter @Setter @NoArgsConstructor 这些 Lombok 注释让我们轻松许多

@Entity
@Getter // 所有属性都设置 get
@Setter // 所有属性都设置 set
@NoArgsConstructor  // 无参构造函式
@AllArgsConstructor // 全参构造函式
@ToString // 建构 toString
public class Product {
    // 有了 Lombok 注释,程序码更简洁
    private Long id;
    private Integer price;
    private String name;
}

假设我们从 client 请求获取数据,但其数据需要经过一些处里才能被储存至 DB 中,在被储存在 DB 中我们的实体会被建构。但这件构过程中需要 new 出物件,并使用 set 方式将这个实体组成一个能被 DB 储存的物件。就像以下

Product product = new Product();
product.setPrice(100);
product.setName("Apple");

但藉由 Lombok 中 @Builder 注释我们可以更简洁更容易阅读

Product product = Product.builder()
.price(100)
.name("Apple")
.build();

假设有一个实体属性是 List 类型,我们可以透过 @Singular 注释进行建构,如下

@Entity
@Getter // 所有属性都设置 get
@Setter // 所有属性都设置 set
@NoArgsConstructor  // 无参构造函式
@AllArgsConstructor // 全参构造函式
public class Product {
    // 有了 Lombok 注释,程序码更简洁
    private Long id;
    private Integer price;
    private String name;
    @Singular("tag")
    private List<String> tags;
}

我们建构数据的时候可以有以下效果

Product product = Product.builder()
.price(100)
.name("Apple")
.tag("eat") // this
.tag("health") // this
.build();

Lombok 还有满多有趣的用法像是以下

public class Test {
    ...
    @EqualsAndHashCode(onlyExplicitlyIncluded = true) // 覆写 quals 和 HashCode
    public static class GroupBy { 
        @EqualsAndHashCode.Include
        private String brand;
        @EqualsAndHashCode.Include
        private String model;
        @EqualsAndHashCode.Include
        private int year;
    }
}

反正学不完...,继续加油吧!!


<<:  < 关於 React: 开始打地基| LifeCycle 生命圈>

>>:  Day 10 - 基本语法5(回圈)

成为工具人应有的工具包-24 SearchMyFiles

SearchMyFiles 今天来认识这个看名字判断应该是找自己的档案的工具? 可是这功能不是从 w...

NIST SP 800-53A(附录E:渗透测试)

企业通常会进行渗透测试,以验证现有的安全和隐私控制,并通过发现漏洞和利用漏洞,彻底记录测试期间执行的...

Day28:错误处理

讲一个经典案例除以0,首先创造一个DivideByZeroEXception类别继承runtime_...

【在 iOS 开发路上的大小事-Day01】先装个 Xcode 开发环境压压惊

前情提要 要用 Swift 来开发 iOS App,我们会需要一台 Mac,这台 Mac 看是要直接...

{CMoney战斗营} 的第十三周 #LINQ

其实根本还不太会SQL,这周的任务马上就变成了学习LINQ,其中的重点包括: IEnumerable...