JavaRush /Java 博客 /Random-ZH /简而言之,春天并不可怕:龙目岛
Павел
第 11 级

简而言之,春天并不可怕:龙目岛

已在 Random-ZH 群组中发布
文章周期的内容 维基 百科的一点内容: 龙目岛(龙目岛来自印度尼西亚语 - “辣椒”)是马来群岛的一个岛屿,属于小巽他群岛,属于印度尼西亚的一部分。Lombok 是 Java 编程语言的一个流行库的名称。之所以选择这个名字,是因为龙目岛距离爪哇岛并不远,而且,显然,它的名字的意思是“辣椒”,因为图书馆为龙目岛提供了有用的“调味料”。语言。说得再好不过了,言语有什么用,让我们看看它的实际效果: 安装插件。 将依赖项添加到 pom 文件的 <dependencies> 块中:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
我们开始吧:打开上一篇文章 中的项目,打开类 FruitEntity
package ru.java.rush.entities;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Entity
@Table(name = "fruit_table")
public class FruitEntity {

    @Id
    @Column(name = "id_fruit")
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    private Integer id;

    @Column(name = "fruit_name")
    private String fruitName;

    @Column(name = "provider_code")
    private Integer providerCode;

//чтобы с классом можно было совершать манипуляции создается
//пустой конструктор, геттеры, сеттеры, конструктор и переопределяется метод toString()

public FruitEntity(){

}


public Integer getId() {
    return id;
}

public FruitEntity setId(Integer id) {
    this.id = id;
    return this;
}

public String getFruitName() {
    return fruitName;
}

public FruitEntity setFruitName(String fruitName) {
    this.fruitName = fruitName;
    return this;
}

public Integer getProviderCode() {
    return providerCode;
}

public FruitEntity setProviderCode(Integer providerCode) {
    this.providerCode = providerCode;
    return this;
}

@Override
public String toString() {
    return "FruitEntity{" +
            "id=" + id +
            ", fruitName='" + fruitName + '\'' +
            ", providerCode=" + providerCode +
            '}';
}
有点长,不是吗?让我们将 Lombok 中的 @Data 注释添加到类中,看看它如何缩短代码。
package ru.java.rush.entities;

import lombok.Data;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Data//annotation сгенирует при компиляции необходимый code
@Entity
@Table(name = "fruit_table")
public class FruitEntity {

    @Id
    @Column(name = "id_fruit")
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    private Integer id;

    @Column(name = "fruit_name")
    private String fruitName;

    @Column(name = "provider_code")
    private Integer providerCode;

//и все! Весь остальной code будет сгенирован Ломбоком
运行项目,检查一切是否正常。现在让我们看看如何使用 Lombok 注入依赖项。让我们打开类 FruitService作为示例,将 @RequiredArgsConstructor 附加到该类并从该类中删除构造函数;我们不再需要它。
package ru.java.rush.services;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import ru.java.rush.entities.FruitEntity;
import ru.java.rush.repositories.FruitRepository;

import java.util.List;


@Service
@RequiredArgsConstructor//annotation от Ломбок
public class FruitService {

    private final FruitRepository fruitRepository;

//здесь когда то был конструктор

    public Optional<FruitEntity> getById(Integer id) {
        return fruitRepository.findById(id);
    }

    public void delById(Integer id) {
        fruitRepository.deleteById(id);
    }

    public Boolean exist(Example<? extends FruitEntity> example) {
        return fruitRepository.exists(example);
    }

    public void save(FruitEntity fruitEntity) {
        fruitRepository.save(fruitEntity);
    }

    public List<FruitEntity> getAll() {
        return fruitRepository.findAll();
    }

    public void saveAll(List<FruitEntity> fruits) {
        fruitRepository.saveAll(fruits);
    }
现在使用相同的方法删除 InitiateUtils 类中不必要的代码。检查一切是否正常。随着该项目的进展,我们正在使用更多新的 Lombok 注释。UPD:Denis Ryabchikov 的好评论“对于实体,最好不要使用 @Data,而是用 @Setter 和 @Getter 替换它,因为 @Data 也会覆盖 toString() 和 hashCode(),并且可能会出现问题如果实体将具有与其他实体的集合和关系,则哈希代码。” 原则上就这些了,这里有一篇关于Lombok的文章,看一下注解的说明:@Data、@Value、@RequiredArgsConstructor和@Builder。在这篇文章中,阅读了 @Accessors,文章是英文的,但是页面翻译器可以很好地处理它,你可以理解其中的含义。 下一篇文章我们将继续填充数据库。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION