JavaRush /Blog Java /Random-PL /Wiosna nie jest straszna, w skrócie: Lombok
Павел
Poziom 11

Wiosna nie jest straszna, w skrócie: Lombok

Opublikowano w grupie Random-PL
TREŚĆ CYKLU ARTYKUŁÓW Trochę Wikipedii: Lombok (z ind. Lombok – „papryczka chili”) to wyspa w Archipelagu Malajskim, w grupie Małych Wysp Sundajskich, wchodzących w skład Indonezji. Lombok to nazwa nadana popularnej bibliotece języka programowania Java. Wybór nazwy wynika z faktu, że wyspa Lombok nie jest tak daleko od wyspy Jawa, a także, najwyraźniej, ze znaczenia jej nazwy „papryczka chili”, ponieważ biblioteka zapewnia użyteczną „przyprawę” dla język. Lepiej tego nie można powiedzieć, a co tu mówić, zobaczmy to w akcji: Zainstaluj wtyczkę. Dodaj zależność do bloku <zależności> pliku pom:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
Zaczynamy: Otwórz projekt z poprzedniego artykułu , otwórz klasę 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 +
            '}';
}
Trochę długo, prawda? Dodajmy do klasy adnotację @Data z Lomboka i zobaczmy, jak skraca to kod.
package ru.java.rush.entities;

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

import javax.persistence.*;

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

//и все! Весь остальной kod будет сгенирован Ломбоком
Uruchom projekt, sprawdź, czy wszystko działa. Zobaczmy teraz, jak można wstrzyknąć zależność za pomocą Lomboka. Otwórzmy jako przykład klasę FruitService , dołączmy @RequiredArgsConstructor do klasy i usuńmy konstruktor z klasy; nie jest nam już potrzebny.
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//adnotacja от Ломбок
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);
    }
Teraz użyj tej samej metody, aby pozbyć się niepotrzebnego kodu w klasie InitiateUtils. Sprawdź, czy wszystko działa. W miarę postępu tego projektu używamy kilku nowych adnotacji Lombok. UPD: Dobry komentarz Denisa Ryabchikowa „W przypadku encji lepiej nie używać @Data, ale zastąpić je @Setter i @Getter, ponieważ @Data zastępuje również toString() i hashCode(), a mogą pojawić się problemy z kod skrótu, jeśli jednostka będzie miała kolekcje i relacje z innymi jednostkami.” W zasadzie to wszystko, tutaj jest artykuł o Lomboku , spójrz na opis adnotacji: @Data, @Value, @RequiredArgsConstructor i @Builder. W tym artykule przeczytaj o @Accessors , artykuł jest w języku angielskim, ale tłumacz strony dobrze sobie z tym radzi, możesz zrozumieć znaczenie. W następnym artykule będziemy kontynuować uzupełnianie bazy danych.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION