JavaRush /בלוג Java /Random-HE /האביב לא מפחיד, בקיצור: לומבוק
Павел
רָמָה

האביב לא מפחיד, בקיצור: לומבוק

פורסם בקבוצה
תוכן מחזור המאמרים קצת מויקיפדיה: לומבוק (לומבוק מאינדונית - "פלפל צ'ילי") הוא אי בארכיפלג המלאי, בקבוצת איי סונדה הקטנים, חלק מאינדונזיה. Lombok הוא השם שניתן לספרייה פופולרית לשפת התכנות Java. בחירת השם נובעת מהעובדה שהאי לומבוק לא כל כך רחוק מהאי ג'אווה, וגם, ככל הנראה, עם משמעות שמו "פלפל צ'ילי", שכן הספרייה מספקת "תיבול" שימושי עבור שפה. לא יכולת להגיד את זה טוב יותר, ומה השימוש במילים, בוא נראה את זה בפעולה: התקן את הפלאגין. הוסף תלות לבלוק <dependencies> של קובץ ה-pom:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
הנה: פתח את הפרויקט מהמאמר הקודם , פתח את הכיתה 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 מ-Lombok לכיתה ונראה איך היא מקצרת את הקוד.
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 будет сгенирован Ломбоком
הפעל את הפרויקט, בדוק שהכל עובד. עכשיו בואו נראה איך אתה יכול להחדיר תלות באמצעות Lombok. בואו נפתח את המחלקה 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//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);
    }
כעת השתמש באותה שיטה כדי להיפטר מקוד מיותר במחלקה InitiateUtils. תבדוק שהכל עובד. ככל שהפרויקט הזה מתקדם, אנו משתמשים בעוד מספר הערות חדשות של Lombok. UPD: הערה טובה של דניס ריאבצ'יקוב "עבור ישות, עדיף לא להשתמש ב-@Data, אלא להחליף אותו ב-@Setter ו-@Getter, מכיוון ש-@Data עוקף גם את toString() ו-hashCode(), וייתכנו בעיות עם קוד hash אם לישות יהיו אוספים וקשרים עם ישויות אחרות." באופן עקרוני, זה הכל, הנה מאמר על Lombok , תסתכל על התיאור של ההערות: @Data, @Value, @RequiredArgsConstructor ו-@Builder. במאמר זה , קרא על @ Accessors , המאמר הוא באנגלית, אבל מתרגם הדפים יכול להתמודד עם זה היטב, אתה יכול להבין את המשמעות. במאמר הבא נמשיך למלא את המאגר.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION