JavaRush /Blog Java /Random-ES /En resumen, la primavera no da miedo: Lombok
Павел
Nivel 11

En resumen, la primavera no da miedo: Lombok

Publicado en el grupo Random-ES
CONTENIDO DEL CICLO DE ARTÍCULOS Un poco de Wikipedia: Lombok (Lombok del indonesio - “pimiento picante”) es una isla del archipiélago malayo, en el grupo de las Islas Menores de la Sonda, parte de Indonesia. Lombok es el nombre que recibe una biblioteca popular para el lenguaje de programación Java. La elección del nombre se debe al hecho de que la isla de Lombok no está tan lejos de la isla de Java, y también, aparentemente, al significado de su nombre "pimiento picante", ya que la biblioteca proporciona un "condimento" útil para la idioma. No puedes decirlo mejor, y de qué sirven las palabras, veámoslo en acción: instala el complemento. Agregue una dependencia al bloque <dependencias> del archivo pom:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
Allá vamos: abra el proyecto del artículo anterior , abra la clase 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 +
            '}';
}
Un poco largo ¿no? Agreguemos la anotación @Data de Lombok a la clase y veamos cómo acorta el código.
package ru.java.rush.entities;

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

import javax.persistence.*;

@Data//anotación сгенирует при компиляции необходимый código
@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;

//и все! Весь остальной código будет сгенирован Ломбоком
Ejecuta el proyecto, comprueba que todo funciona. Ahora veamos cómo puedes inyectar una dependencia usando Lombok. Abramos la clase FruitService como ejemplo , adjuntemos @RequiredArgsConstructor a la clase y eliminemos el constructor de la clase; ya no lo necesitamos.
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//anotación от Ломбок
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);
    }
Ahora use el mismo método para deshacerse del código innecesario en la clase InitiateUtils. Comprueba que todo esté funcionando. A medida que avanza este proyecto, utilizamos varias anotaciones nuevas de Lombok. UPD: Buen comentario de Denis Ryabchikov "Para una entidad, es mejor no usar @Data, sino reemplazarlo con @Setter y @Getter, porque @Data también anula toString() y hashCode(), y pueden surgir problemas con el código hash si la entidad tendrá colecciones y relaciones con otras entidades". En principio, eso es todo, aquí tienes un artículo sobre Lombok , mira la descripción de las anotaciones: @Data, @Value, @RequiredArgsConstructor y @Builder. En este artículo, lea sobre @ Accessors . El artículo está en inglés, pero el traductor de la página puede manejarlo bien y puede comprender el significado. En el próximo artículo seguiremos llenando la base de datos.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION