เนื้อหาของวัฏจักรของบทความ วิ กิพีเดียเล็กน้อย: ลอมบอก (ลอมบอกจากภาษาอินโดนีเซีย - “พริก”) เป็นเกาะในหมู่เกาะมาเลย์ ในกลุ่มหมู่เกาะซุนดาน้อย ซึ่งเป็นส่วนหนึ่งของอินโดนีเซีย ลอมบอกเป็นชื่อที่ตั้งให้กับไลบรารียอดนิยมสำหรับภาษาการเขียนโปรแกรมจาวา การเลือกชื่อเกิดจากการที่เกาะลอมบอกอยู่ไม่ไกลจากเกาะชวาและเห็นได้ชัดว่ามีความหมายของชื่อ "พริก" เนื่องจากห้องสมุดมี "เครื่องปรุงรส" ที่เป็นประโยชน์สำหรับ ภาษา. คุณไม่สามารถพูดได้ดีไปกว่านี้แล้ว และอะไรคือการใช้คำ มาดูกันในทางปฏิบัติ: ติดตั้งปลั๊กอิน เพิ่มการพึ่งพาไปยังบล็อก <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 จากลอมบอกลงในชั้นเรียนแล้วดูว่าจะทำให้โค้ดสั้นลงได้อย่างไร
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 будет сгенирован Ломбоком
รันโปรเจ็กต์ ตรวจสอบว่าทุกอย่างใช้งานได้ ตอนนี้เรามาดูกันว่าคุณสามารถฉีดการพึ่งพาโดยใช้ลอมบอกได้อย่างไร มาเปิด คลาส FruitServiceเป็นตัวอย่างแนบ @RequiredArgsConstructor เข้ากับคลาสและลบ Constructor ออกจากคลาส เราไม่ต้องการมันอีกต่อไป
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 ตรวจสอบว่าทุกอย่างทำงานได้ ในขณะที่โปรเจ็กต์นี้ดำเนินไป เรากำลังใช้คำอธิบายประกอบลอมบอกใหม่อีกหลายรายการ UPD: ความคิดเห็นที่ดีจาก Denis Ryabchikov "สำหรับเอนทิตี จะเป็นการดีกว่าที่จะไม่ใช้ @Data แต่แทนที่ด้วย @Setter และ @Getter เนื่องจาก @Data จะแทนที่ toString() และ hashCode() ด้วย และปัญหาอาจเกิดขึ้นกับ รหัสแฮชหากเอนทิตีจะมีคอลเลกชันและความสัมพันธ์กับเอนทิตีอื่น ๆ " โดยหลักการแล้ว นั่นคือทั้งหมด นี่ คือ บทความเกี่ยวกับลอมบอกดูคำอธิบายของคำอธิบายประกอบ: @Data, @Value, @RequiredArgsConstructor และ @Builder ในบทความนี้ อ่านเกี่ยวกับ @ Accessorsบทความเป็นภาษาอังกฤษ แต่นักแปลเพจก็รับมือได้ดี คุณก็เข้าใจความหมายได้ ในบทความถัดไปเราจะทำการกรอกฐานข้อมูลต่อไป
GO TO FULL VERSION