СОДЕРЖАНИЕ ЦИКЛА СТАТЕЙ
Немного Википедии:
Ломбо́к (Lombok с индон. — «перец чили») — остров в Малайском архипелаге, в группе Малых Зондских островов, в составе Индонезии.
Lombok названа популярная библиотека для языка программирования Java. Выбор названия связан с тем, что остров Ломбок находится не так далеко от острова Ява, а также, видимо, со значением его названия "перец чили", поскольку библиотека предоставляет полезные "приправы" для языка.
Лучше и не скажешь, да и к чему слова, давайте посмотрим его в деле:
Установите плагин.
В блок <dependencies> pom файла добавляем зависимость:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
Понеслась:
Откройте проект из прошлой статьи, откройте class 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 +
'}';
}
Длинноват, не правда ли? Повесим на класс аннотацию @Data от Ломбока и посмотрим как это сократит код.
package ru.java.rush.entities;
import lombok.Data;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
@Data//аннотация сгенирует при компиляции необходимый код
@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;
//и все! Весь остальной код будет сгенирован Ломбоком
Запустите проект, проверьте что все работает.
Теперь по смотрим как с помощью Lombok можно внедрять зависимость. Откроем для примера class 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//аннотация от Ломбок
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. Проверьте что все работает. По ходу этого проекта, мы используем еще несколько новых аннотаций Ломбока.
UPD: Хороший комментарий от Denis Ryabchikov
"Для entity лучше не использовать @Data, а заменять ее на @Setter и @Getter, т.к. @Data также переопределяет toString() и hashCode(), и с хеш-кодом могут возникнуть проблемы, если entity будет иметь коллекции и связи с другими entity."
В принципе и все, вот статья по Ломбоку в ней посмотрите описание аннотаций: @Data, @Value, @RequiredArgsConstructor и @Builder.
В этой статье почитайте про @ Accessors, статья на английском, но переводчик страницы хорошо с этим справиться, понять смысл можно.
В следующей статье продолжим наполнять базу.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
которые никто не читает,без выходных и праздничных.