JavaRush /Blogue Java /Random-PT /A primavera não é assustadora, resumindo: Lombok
Павел
Nível 11

A primavera não é assustadora, resumindo: Lombok

Publicado no grupo Random-PT
CONTEÚDO DO CICLO DE ARTIGOS Um pouco da Wikipédia: Lombok (Lombok do indoniano - “pimenta malagueta”) é uma ilha do Arquipélago Malaio, no grupo das Pequenas Ilhas da Sonda, parte da Indonésia. Lombok é o nome dado a uma biblioteca popular para a linguagem de programação Java. A escolha do nome deve-se ao facto da ilha de Lombok não estar tão longe da ilha de Java, e também, aparentemente, com o significado do seu nome "pimenta", uma vez que a biblioteca fornece "tempero" útil para o linguagem. Você não pode dizer melhor, e para que servem as palavras, vamos ver em ação: Instale o plugin. Adicione uma dependência ao bloco <dependencies> do arquivo pom:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
Vamos lá: Abra o projeto do artigo anterior , abra a classe 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 +
            '}';
}
Um pouco longo, não é? Vamos adicionar a anotação @Data do Lombok à classe e ver como ela encurta o código.
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 будет сгенирован Ломбоком
Execute o projeto, verifique se tudo funciona. Agora vamos ver como você pode injetar uma dependência usando o Lombok. Vamos abrir a classe FruitService como exemplo , anexar @RequiredArgsConstructor à classe e remover o construtor da classe; não precisamos mais dele.
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);
    }
Agora use o mesmo método para se livrar do código desnecessário na classe InitiateUtils. Verifique se tudo está funcionando. À medida que este projeto avança, estamos usando várias outras anotações novas do Lombok. UPD: Bom comentário de Denis Ryabchikov "Para uma entidade, é melhor não usar @Data, mas substituí-lo por @Setter e @Getter, porque @Data também substitui toString() e hashCode(), e podem surgir problemas com o código hash se a entidade tiver coleções e relacionamentos com outras entidades." Em princípio, isso é tudo, aqui está um artigo sobre Lombok , veja a descrição das anotações: @Data, @Value, @RequiredArgsConstructor e @Builder. Neste artigo, leia sobre @ Accessors , o artigo está em inglês, mas o tradutor da página aguenta bem, você consegue entender o significado. No próximo artigo continuaremos a preencher o banco de dados.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION