JavaRush /Blog Java /Random-FR /Le printemps ne fait pas peur, en bref : Lombok
Павел
Niveau 11

Le printemps ne fait pas peur, en bref : Lombok

Publié dans le groupe Random-FR
CONTENU DU CYCLE D'ARTICLES Un peu de Wikipédia : Lombok (Lombok de l'indonien - « piment ») est une île de l'archipel malais, dans le groupe des petites îles de la Sonde, qui fait partie de l'Indonésie. Lombok est le nom donné à une bibliothèque populaire pour le langage de programmation Java. Le choix du nom est dû au fait que l'île de Lombok n'est pas très éloignée de l'île de Java, et aussi, apparemment, à la signification de son nom « piment », puisque la bibliothèque propose un « assaisonnement » utile pour le langue. Vous ne pouvez pas le dire mieux, et à quoi servent les mots, voyons-le en action : installez le plugin. Ajoutez une dépendance au bloc <dependencies> du fichier pom :
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
C'est parti : Ouvrez le projet de l' article précédent , ouvrez la 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 +
            '}';
}
Un peu long, non ? Ajoutons l'annotation @Data de Lombok à la classe et voyons comment elle raccourcit le code.
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 будет сгенирован Ломбоком
Exécutez le projet, vérifiez que tout fonctionne. Voyons maintenant comment injecter une dépendance à l'aide de Lombok. Ouvrons la classe FruitService comme exemple , attachons @RequiredArgsConstructor à la classe et supprimons le constructeur de la classe ; nous n'en avons plus besoin.
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);
    }
Utilisez maintenant la même méthode pour supprimer le code inutile dans la classe InitiateUtils. Vérifiez que tout fonctionne. Au fur et à mesure que ce projet progresse, nous utilisons plusieurs nouvelles annotations Lombok. UPD : Bon commentaire de Denis Ryabchikov "Pour une entité, il est préférable de ne pas utiliser @Data, mais de le remplacer par @Setter et @Getter, car @Data remplace également toString() et hashCode(), et des problèmes peuvent survenir avec le code de hachage si l'entité aura des collections et des relations avec d'autres entités. En principe c'est tout, voici un article sur Lombok , regardez la description des annotations : @Data, @Value, @RequiredArgsConstructor et @Builder. Dans cet article, lisez sur @ Accessors , l'article est en anglais, mais le traducteur de page peut bien le gérer, vous pouvez en comprendre le sens. Dans le prochain article, nous continuerons à remplir la base de données.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION