文章周期的内容 维基 百科的一点内容: 龙目岛(龙目岛来自印度尼西亚语 - “辣椒”)是马来群岛的一个岛屿,属于小巽他群岛,属于印度尼西亚的一部分。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,文章是英文的,但是页面翻译器可以很好地处理它,你可以理解其中的含义。 下一篇文章我们将继续填充数据库。
GO TO FULL VERSION