โค้ดยิม/จาวาบล็อก/สุ่ม/แอปพลิเคชั่น Hibernate แรกของคุณ
John Squirrels
ระดับ
San Francisco

แอปพลิเคชั่น Hibernate แรกของคุณ

เผยแพร่ในกลุ่ม
ในบทความนี้ คุณจะทำความคุ้นเคยกับหนึ่งในเฟรมเวิร์กองค์กรยอดนิยมสำหรับ Java และสร้างแอปพลิเคชัน Hibernate แรกของคุณ ไม่เคยได้ยินเกี่ยวกับไฮเบอร์เนต? หรือบางทีคุณอาจเคยได้ยินแต่ยังไม่เคยใช้? หรือบางทีคุณอาจพยายามใช้แต่ล้มเหลว? ในทั้งสามกรณี - ยินดีต้อนรับสู่ด้านล่างของการตัด :) แอปพลิเคชัน Hibernate แรกของคุณ - 1 สวัสดีทุกคน! ในบทความนี้ ฉันจะพูดถึงคุณสมบัติหลักของเฟรมเวิร์ก Hibernate และช่วยคุณเขียนแอปพลิเคชันขนาดเล็กตัวแรกของคุณ สำหรับสิ่งนี้ เราต้องการ:

  1. ดาวน์โหลดIntelliJ IDEA Ultimate Edition จาก เว็บไซต์อย่างเป็นทางการและเปิดใช้งานรุ่นทดลองใช้ 30 วัน
  2. PostgreSQL - หนึ่งในระบบจัดการฐานข้อมูลสมัยใหม่ที่ได้รับความนิยมสูงสุด (DBMS)
  3. Maven (เชื่อมต่อกับ IDEA แล้ว)
  4. อดทนอีกนิด
ในกรณีที่ฉันโพสต์รหัสแอปพลิเคชันบนGitHub (สาขา codegym) บทความนี้มุ่งเป้าไปที่ผู้ที่ไม่เคยใช้เทคโนโลยีนี้มาก่อน ดังนั้นฉันจึงลดจำนวนโค้ดให้เหลือน้อยที่สุด มาเริ่มกันเลย!

ไฮเบอร์เนตคืออะไร?

เป็นหนึ่งในการใช้งานการทำแผนที่เชิงวัตถุ (ORM) ที่ได้รับความนิยมมากที่สุด การทำแผนที่เชิงวัตถุกำหนดความสัมพันธ์ระหว่างวัตถุซอฟต์แวร์และบันทึกฐานข้อมูล แน่นอนว่า Hibernate มีฟังก์ชันการทำงานที่หลากหลายมาก แต่เราจะเน้นไปที่ฟังก์ชันที่ง่ายที่สุด เป้าหมายของเราคือการสร้างแอปพลิเคชัน CRUD (สร้าง อ่าน อัปเดต ลบ) ที่จะสามารถ:
  1. สร้างผู้ใช้ (User) ค้นหาในฐานข้อมูลด้วย ID อัปเดตข้อมูลในฐานข้อมูล และลบออกจากฐานข้อมูล
  2. กำหนดวัตถุรถยนต์ (อัตโนมัติ) ให้กับผู้ใช้ สร้าง อัปเดต ค้นหา และลบรถยนต์ออกจากฐานข้อมูล
  3. นอกจากนี้ แอปพลิเคชันควรลบรถยนต์ที่ "ไม่มีเจ้าของ" ออกจากฐานข้อมูลโดยอัตโนมัติ กล่าวอีกนัยหนึ่ง เมื่อผู้ใช้ถูกลบ รถยนต์ทั้งหมดที่เป็นของผู้ใช้นั้นจะต้องถูกลบออกจากฐานข้อมูลด้วย
โครงการของเราจะมีโครงสร้างดังนี้ แอปพลิเคชัน Hibernate แรกของคุณ - 2อย่างที่คุณเห็น ไม่มีอะไรซับซ้อน 6 คลาส + 1 ไฟล์พร้อมการกำหนดค่า ขั้นแรก สร้างโครงการ Maven ใหม่ใน IntelliJ IDEA ไฟล์ -> โครงการใหม่ เลือก Maven จากประเภทโครงการที่เสนอและย้ายไปยังขั้นตอนถัดไป แอปพลิเคชัน Hibernate แรกของคุณ - 3Apache Maven เป็นเฟรมเวิร์กสำหรับสร้างโปรเจ็กต์โดยอัตโนมัติตามคำอธิบายของโครงสร้างในไฟล์ POM โครงสร้างทั้งหมดของโครงการของคุณจะอธิบายไว้ใน pom.xml ซึ่งเป็นไฟล์ที่ IDEA สร้างขึ้นเองในรูทของโครงการของคุณ ในการตั้งค่าโครงการ คุณต้องระบุการตั้งค่า Maven ต่อไปนี้: groupId และ artifactId ในโครงการ groupId มักจะเป็นรายละเอียดของบริษัทหรือหน่วยธุรกิจ ชื่อโดเมนของบริษัทหรือเว็บไซต์สามารถไปที่นี่ ในทางกลับกัน artifactId คือชื่อของโครงการ สำหรับ groupdId คุณสามารถcom.yourNickname.codegymป้อน การดำเนินการนี้จะไม่มีผลใดๆ ต่อแอปพลิเคชัน สำหรับ artifactId ให้เลือกชื่อโปรเจ็กต์ที่คุณต้องการ เวอร์ชันไม่สามารถเปลี่ยนแปลงได้ แอปพลิเคชัน Hibernate แรกของคุณ - 4ในหน้าจอสุดท้าย เพียงยืนยันข้อมูลที่ป้อนก่อนหน้านี้แอปพลิเคชัน Hibernate แรกของคุณ - 5ดังนั้นเราจึงสร้างโครงการ ตอนนี้สิ่งที่ต้องทำคือเขียนโค้ดและทำให้มันใช้งานได้ :) สิ่งแรกอย่างแรก: หากเราต้องการสร้างแอปพลิเคชันที่ทำงานร่วมกับฐานข้อมูล เราไม่สามารถทำได้หากไม่มีฐานข้อมูล! ดาวน์โหลด PostgreSQL จากที่นี่ (ฉันใช้เวอร์ชัน 9) PostgreSQL มีผู้ใช้เริ่มต้นคือ 'postgres' คุณจะต้องคิดรหัสผ่านเมื่อทำการติดตั้ง อย่าลืมรหัสผ่าน เราต้องการมันในภายหลัง! (โดยทั่วไป การใช้ฐานข้อมูลเริ่มต้นในแอปพลิเคชันถือเป็นแนวทางปฏิบัติที่ไม่ดี แต่เราจะทำเพื่อลดจำนวนแผลที่เกิดจากการสร้างฐานข้อมูลของคุณเอง) หากคุณไม่ได้เป็นเพื่อนกับบรรทัดคำสั่งและคำสั่ง SQL มีข่าวดี IntelliJ IDEA มีส่วนติดต่อผู้ใช้ที่เหมาะสมอย่างยิ่งสำหรับการทำงานกับฐานข้อมูล แอปพลิเคชัน Hibernate แรกของคุณ - 6(อยู่ในบานหน้าต่างด้านขวาของ IDEA แท็บฐานข้อมูล) หากต้องการสร้างการเชื่อมต่อ ให้คลิก "+" แล้วเลือกแหล่งข้อมูลของเรา (PostgeSQL) กรอกข้อมูลในช่องสำหรับผู้ใช้และฐานข้อมูล ("postgres" สำหรับทั้งสองช่อง) และป้อนรหัสผ่านที่ตั้งไว้ระหว่างการติดตั้ง PostgreSQL หากจำเป็น ให้ดาวน์โหลดไดรเวอร์ Postgres คุณสามารถทำได้ในหน้าเดียวกัน คลิก "ทดสอบการเชื่อมต่อ" เพื่อยืนยันว่าสร้างการเชื่อมต่อฐานข้อมูลแล้ว หากคุณเห็น "สำเร็จ" ให้ดำเนินการต่อ ตอนนี้เราจะสร้างตารางที่เราต้องการ จะมีทั้งหมดสอง: ผู้ใช้และอัตโนมัติ พารามิเตอร์สำหรับตารางผู้ใช้: แอปพลิเคชัน Hibernate แรกของคุณ - 7โปรดทราบว่า id เป็นคีย์หลัก หากคุณไม่รู้ว่าคีย์หลักคืออะไรใน SQL ให้ Google ค้นหา นี้เป็นสิ่งสำคัญ. การตั้งค่าสำหรับตารางรถยนต์: แอปพลิเคชัน Hibernate แรกของคุณ - 8สำหรับตาราง autos คุณต้องกำหนดค่าคีย์นอก มันจะทำหน้าที่เชื่อมโยงตารางของเรา ฉันขอแนะนำให้คุณอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ พูดง่ายๆ คืออ้างอิงตารางภายนอก ในกรณีของเราคือผู้ใช้ หากรถยนต์เป็นของผู้ใช้ที่มี id = 1 ช่อง user_id ของรถยนต์จะเท่ากับ 1 นี่คือวิธีที่เราเชื่อมโยงผู้ใช้กับรถยนต์ของพวกเขาในแอปพลิเคชันของเรา ในตาราง autos ฟิลด์ user_id จะทำหน้าที่เป็นคีย์นอก มันจะอ้างถึงฟิลด์ id ของตารางผู้ใช้ แอปพลิเคชัน Hibernate แรกของคุณ - 9ดังนั้นเราจึงสร้างฐานข้อมูลที่มีสองตาราง สิ่งที่เหลืออยู่คือการเข้าใจวิธีจัดการจากโค้ด Java เราจะเริ่มต้นด้วยไฟล์ pom.xml ซึ่งเราจำเป็นต้องรวมไลบรารีที่จำเป็น (ใน Maven เรียกว่าการพึ่งพา) ไลบรารีทั้งหมดถูกจัดเก็บไว้ในที่เก็บ Maven ส่วนกลาง ไลบรารีที่คุณระบุใน pom.xml มีให้คุณใช้ในโครงการ pom.xml ของคุณควรมีลักษณะดังนี้: แอปพลิเคชัน Hibernate แรกของคุณ - 10ไม่มีอะไรซับซ้อนอย่างที่คุณเห็น เราเพิ่มการอ้างอิงเพียง 2 รายการ — สำหรับการใช้ PostgreSQL และ Hibernate ตอนนี้เรามาที่โค้ด Java กัน สร้างแพ็คเกจและคลาสที่จำเป็นทั้งหมดในโครงการ ในการเริ่มต้น เราจำเป็นต้องมีโมเดลข้อมูล: the UserและAutoคลาส
package models;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table (name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name = "name")
    private String name;
    // You can omit the Column attribute if the name property matches the column name in the table
    private int age;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Auto> autos;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
        autos = new ArrayList<>();
    }

    public void addAuto(Auto auto) {
        auto.setUser(this);
        autos.add(auto);
    }

    public void removeAuto(Auto auto) {
        autos.remove(auto);
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<Auto> getAutos() {
        return autos;
    }

    public void setAutos(List<Auto> autos) {
        this.autos = autos;
    }

    @Override
    public String toString() {
        return "models.User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package models;

import javax.persistence.*;

@Entity
@Table(name = "autos")
public class Auto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column (name = "model")
    private String model;

    // You can omit the Column attribute if the name property matches the column name in the table
    private String color;


    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;

    public Auto() {
    }

    public Auto(String model, String color) {
        this.model = model;
        this.color = color;
    }

    public int getId() {
        return id;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return color + " " + model;
    }
}
อย่างที่คุณเห็น ชั้นเรียนมีคำอธิบายประกอบที่คลุมเครือมากมาย มาเริ่มขุดค้นพวกมันกัน สำหรับเรา คำอธิบายประกอบหลักคือ @Entity อ่านเกี่ยวกับเรื่องนี้ในวิกิพีเดียและเรียนรู้ทั้งหมดด้วยหัวใจ นี่คือรากฐานของมูลนิธิ คำอธิบายประกอบนี้ทำให้ออบเจกต์ของคลาส Java ของคุณถูกแมปกับฐานข้อมูล เพื่อให้คลาสเป็นเอนทิตี จะต้องเป็นไปตามข้อกำหนดต่อไปนี้:
  • ต้องมีตัวสร้างว่าง ( publicหรือprotected)
  • ไม่สามารถซ้อนอินเทอร์เฟซหรือenum
  • ไม่สามารถfinalและไม่มีfinalเขตข้อมูล/คุณสมบัติ
  • ต้องมีฟิลด์ @Id อย่างน้อยหนึ่งฟิลด์
ตรวจสอบชั้นเรียนเอนทิตีของคุณ: เป็นสถานที่ยอดนิยมในการยิงตัวเองด้วยเท้า มันง่ายมากที่จะลืมบางสิ่ง นอกจากนี้ กิจการยังสามารถดำเนินการดังต่อไปนี้:
  • สามารถมีตัวสร้างที่ไม่ว่างเปล่า
  • สามารถสืบทอดและสืบทอดได้
  • สามารถมีวิธีการอื่นและใช้อินเทอร์เฟซ
อย่างที่คุณเห็นUserคลาสนั้นคล้ายกับตารางผู้ใช้มาก มีid, name, และageเขตข้อมูล คำอธิบายประกอบที่อยู่ด้านบนไม่ต้องการคำอธิบายใด ๆ เป็นที่ชัดเจนว่า @Id ระบุว่าฟิลด์เป็นตัวระบุของออบเจ็กต์ของคลาสนี้ คำอธิบายประกอบ @Table เหนือคลาสระบุชื่อของตารางที่มีการเขียนวัตถุ หมายเหตุความคิดเห็นเหนือฟิลด์อายุ: ถ้าชื่อของฟิลด์ในคลาสเหมือนกับชื่อของตาราง คุณสามารถละเว้น @Column คำอธิบายประกอบและจะใช้ได้ สำหรับส่วนที่ระบุไว้ในเครื่องหมายปีกกา ("กลยุทธ์ = GenerationType.IDENTITY"): มีหลายกลยุทธ์ในการสร้าง ID คุณสามารถ Google ได้ แต่สำหรับแอปพลิเคชันของเรา ไม่ต้องกังวล สิ่งสำคัญคือสำหรับวัตถุของเรา ค่าของ id จะถูกสร้างขึ้นโดยอัตโนมัติ ดังนั้นจึงไม่มีตัวตั้งค่าสำหรับ id และเราไม่ได้ตั้งค่าในตัวสร้างเช่นกัน อย่างไรก็ตาม,Userชั้นไม่โดดเด่น มีรายชื่อรถแล้ว! แอปพลิเคชัน Hibernate แรกของคุณ - 11คำอธิบายประกอบ @OneToMany แขวนอยู่เหนือรายการ หมายความว่ารถยนต์หลายคันสามารถสอดคล้องกับวัตถุเดียวกันของคลาสผู้ใช้ องค์ประกอบ "mappedBy" อ้างถึงฟิลด์ผู้ใช้ของAutoคลาส รถยนต์และผู้ใช้จึงมีความเกี่ยวข้องกัน องค์ประกอบ orphanRemoval ระบุว่าจะใช้การดำเนินการลบกับเอนทิตีที่ไม่มีความสัมพันธ์อีกต่อไปหรือไม่ หากเราลบผู้ใช้ออกจากฐานข้อมูล รถยนต์ทั้งหมดที่เกี่ยวข้องกับผู้ใช้นั้นจะถูกลบด้วย ในทางกลับกัน ในAutoคุณจะเห็นฟิลด์ผู้ใช้พร้อมคำอธิบายประกอบ @ManyToOne (ผู้ใช้หนึ่งคนสามารถสอดคล้องกับหลายอัตโนมัติ) และคำอธิบายประกอบ @JoinColumn ระบุว่าคอลัมน์ใดในตาราง autos ใช้เพื่ออ้างอิงตารางผู้ใช้ (เช่น foreign key ที่เราพูดถึงก่อนหน้านี้) หลังจากสร้างโมเดลข้อมูลแล้ว ก็ถึงเวลาสอนโปรแกรมของเราให้ดำเนินการกับข้อมูลในฐานข้อมูล เริ่มต้นด้วยคลาสยูทิลิตี้ HibernateSessionFactoryUtil มีเพียงงานเดียวเท่านั้น — เพื่อสร้างโรงงานเซสชั่นสำหรับแอปพลิเคชันของเราเพื่อทำงานกับฐานข้อมูล (ทักทายกับรูปแบบการออกแบบโรงงาน!) มันไม่รู้ว่าจะต้องทำอย่างไรอีก
package utils;

import models.Auto;
import models.User;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactoryUtil {
    private static SessionFactory sessionFactory;

    private HibernateSessionFactoryUtil() {}

    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null) {
            try {
                Configuration configuration = new Configuration().configure();
                configuration.addAnnotatedClass(User.class);
                configuration.addAnnotatedClass(Auto.class);
                StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
                sessionFactory = configuration.buildSessionFactory(builder.build());

            } catch (Exception e) {
                System.out.println("Исключение!" + e);
            }
        }
        return sessionFactory;
    }
}
ในคลาสนี้ เราสร้าง Configuration object ใหม่ และส่งไปยังคลาสที่ควรถือว่าเป็นเอนทิตี: Userและ Autoให้ความสนใจกับconfiguration.getProperties()วิธีการ มีคุณสมบัติอะไรอีกบ้าง? พวกเขามาจากที่ไหน? คุณสมบัติคือการตั้งค่าไฮเบอร์เนตที่ระบุในไฟล์ hibernate.cfg.xml พิเศษ แอปพลิเคชัน Hibernate แรกของคุณ - 12อ่าน Hibernate.cfg.xml ที่นี่: new Configuration().configure(); อย่างที่คุณเห็น ไม่มีอะไรพิเศษเกี่ยวกับมัน: มันมีพารามิเตอร์สำหรับการเชื่อมต่อกับฐานข้อมูล เช่นเดียวกับพารามิเตอร์ show_sql สิ่งนี้จำเป็นเพื่อให้การสืบค้น sql ทั้งหมดที่ดำเนินการโดย Hibernate แสดงบนคอนโซล ด้วยวิธีนี้คุณจะเห็นได้อย่างชัดเจนว่า Hibernate กำลังทำอะไรในช่วงเวลาใดเวลาหนึ่ง โดยขจัดความรู้สึกของ "เวทมนตร์" ออกไป ต่อไปเราต้องการUserDAOระดับ. แนวทางปฏิบัติที่ดีที่สุดคือการเขียนโปรแกรมผ่านอินเทอร์เฟซ — สร้างUserDAOอินเทอร์เฟซแยกต่างหากและUserDAOImplการใช้งาน แต่ฉันจะข้ามขั้นตอนนี้ไปเพื่อลดจำนวนโค้ด อย่าทำสิ่งนี้ในโครงการจริง! รูปแบบการออกแบบ DAO (วัตถุเข้าถึงข้อมูล) เป็นหนึ่งในรูปแบบที่พบได้บ่อยที่สุด แนวคิดนั้นเรียบง่าย — สร้างเลเยอร์แอปพลิเคชันที่มีหน้าที่เข้าถึงข้อมูลเท่านั้น ไม่มีอะไรเพิ่มเติม ดึงข้อมูลจากฐานข้อมูล อัปเดตข้อมูล ลบข้อมูล แค่นั้น ศึกษาเพิ่มเติมเกี่ยวกับ DAO คุณจะใช้วัตถุเข้าถึงข้อมูลอย่างต่อเนื่องในการทำงานของคุณ UserDaoชั้นเรียนของเราทำอะไรได้บ้าง เช่นเดียวกับ DAO ทั้งหมด สามารถทำงานกับข้อมูลเท่านั้น ค้นหาผู้ใช้ด้วย id อัปเดตข้อมูล ลบออก รับรายชื่อผู้ใช้ทั้งหมดจากฐานข้อมูล หรือบันทึกผู้ใช้ใหม่ในฐานข้อมูล นั่นคือฟังก์ชันการทำงานทั้งหมด
package dao;

import models.Auto;
import models.User;
import org.hibernate.Session;
import org.hibernate.Transaction;
import utils.HibernateSessionFactoryUtil;
import java.util.List;

public class UserDao {

    public User findById(int id) {
        return HibernateSessionFactoryUtil.getSessionFactory().openSession().get(User.class, id);
    }

    public void save(User user) {
        Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
        Transaction tx1 = session.beginTransaction();
        session.save(user);
        tx1.commit();
        session.close();
    }

    public void update(User user) {
        Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
        Transaction tx1 = session.beginTransaction();
        session.update(user);
        tx1.commit();
        session.close();
    }

    public void delete(User user) {
        Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
        Transaction tx1 = session.beginTransaction();
        session.delete(user);
        tx1.commit();
        session.close();
    }

    public Auto findAutoById(int id) {
        return HibernateSessionFactoryUtil.getSessionFactory().openSession().get(Auto.class, id);
    }

    public List<User> findAll() {
        List<User> users = (List<User>) HibernateSessionFactoryUtil.getSessionFactory().openSession().createQuery("From User").list();
        return users;
    }
}
UserDaoวิธีการของมันก็คล้ายๆกัน โดยส่วนใหญ่แล้ว เราได้รับSession object (เซสชันการเชื่อมต่อฐานข้อมูล) โดยใช้ Session Factory ของเรา สร้างธุรกรรมเดียวภายในเซสชันนี้ ดำเนินการจัดการข้อมูลที่จำเป็น บันทึกผลลัพธ์ของธุรกรรมในฐานข้อมูล แล้วปิดเซสชัน อย่างที่คุณเห็นวิธีการนั้นค่อนข้างง่าย DAO คือ "หัวใจ" ของแอปพลิเคชันของเรา อย่างไรก็ตาม เราจะไม่สร้าง DAO โดยตรงและเรียกเมธอดของมันในmain()เมธอด ของเรา ตรรกะทั้งหมดจะถูกย้ายไปยังUserServiceชั้นเรียน
package services;

import dao.UserDao;
import models.Auto;
import models.User;

import java.util.List;

public class UserService {

    private UserDao usersDao = new UserDao();

    public UserService() {
    }

    public User findUser(int id) {
        return usersDao.findById(id);
    }

    public void saveUser(User user) {
        usersDao.save(user);
    }

    public void deleteUser(User user) {
        usersDao.delete(user);
    }

    public void updateUser(User user) {
        usersDao.update(user);
    }

    public List<User> findAllUsers() {
        return usersDao.findAll();
    }

    public Auto findAutoById(int id) {
        return usersDao.findAutoById(id);
    }


}
บริการเป็นชั้นข้อมูลแอปพลิเคชันที่รับผิดชอบในการดำเนินการตรรกะทางธุรกิจ หากโปรแกรมของคุณต้องดำเนินการตามตรรกะทางธุรกิจบางประเภท จะดำเนินการผ่านบริการต่างๆ บริการประกอบด้วย a UserDaoและเรียกใช้เมธอด DAO ในเมธอด อาจดูเหมือนว่าเรากำลังทำซ้ำฟังก์ชันที่นี่ (ทำไมไม่เรียกเมธอดจากวัตถุ DAO ล่ะ) แต่ด้วยออบเจกต์จำนวนมากและตรรกะที่ซับซ้อน การแบ่งชั้นของแอปพลิเคชันให้ประโยชน์อย่างมาก (การทำเช่นนี้ถือเป็นแนวทางปฏิบัติที่ดี — จำสิ่งนี้ไว้ในอนาคต และอ่านเกี่ยวกับ "ชั้นแอปพลิเคชัน") บริการของเรามีตรรกะง่ายๆ แต่วิธีการบริการในโครงการในโลกแห่งความจริงมีโค้ดมากกว่าหนึ่งบรรทัด :) ตอนนี้เรามีทุกสิ่งที่คุณต้องการเพื่อเรียกใช้แอปพลิเคชัน! ในmain()วิธีการนี้ เรามาสร้างผู้ใช้และรถของผู้ใช้ เชื่อมโยงกัน และบันทึกไว้ในฐานข้อมูล
import models.Auto;
import models.User;
import services.UserService;

import java.sql.SQLException;

public class Main {
    public static void main(String[] args) throws SQLException {

        UserService userService = new UserService();
        User user = new User ("Jenny", 26);
        userService.saveUser(user);
        Auto ferrari = new Auto("Ferrari", "red");
        ferrari.setUser(user);
        user.addAuto(ferrari);
        Auto ford = new Auto("Ford", "black");
        ford.setUser(user);
        user.addAuto(ford);
        userService.updateUser(user);
    }
}
อย่างที่คุณเห็น ตารางผู้ใช้มีบันทึกของตัวเอง และตารางรถยนต์มีบันทึกของตัวเอง แอปพลิเคชัน Hibernate แรกของคุณ - 13แอปพลิเคชัน Hibernate แรกของคุณ - 14ลองเปลี่ยนชื่อผู้ใช้ของเรา ล้างตารางผู้ใช้และรันโค้ด
import models.Auto;
import models.User;
import services.UserService;

import java.sql.SQLException;

public class Main {
    public static void main(String[] args) throws SQLException {

        UserService userService = new UserService();
        User user = new User ("Jenny", 26);
        userService.saveUser(user);
        Auto ferrari = new Auto("Ferrari", "red");
        user.addAuto(ferrari);
        Auto ford = new Auto("Ford", "black");
        ford.setUser(user);
        user.addAuto(ford);
        userService.updateUser(user);
        user.setName ("Benny");
        userService.updateUser(user);
    }
}
มันได้ผล! แอปพลิเคชัน Hibernate แรกของคุณ - 15จะเกิดอะไรขึ้นถ้าคุณลบผู้ใช้ ล้างตารางผู้ใช้ (อัตโนมัติจะล้างตัวเอง) และดำเนินการรหัส
import models.Auto;
import models.User;
import services.UserService;

import java.sql.SQLException;

public class Main {
    public static void main(String[] args) throws SQLException {

        UserService userService = new UserService();
        User user = new User ("Jenny", 26);
        userService.saveUser(user);
        Auto ferrari = new Auto("Ferrari", "red");
        user.addAuto(ferrari);
        Auto ford = new Auto("Ford", "black");
        ford.setUser(user);
        user.addAuto(ford);
        userService.updateUser(user);
        user.setName ("Benny");
        userService.updateUser(user);
        userService.deleteUser(user);
    }
}
และตารางของเราว่างเปล่าทั้งหมด (ให้ความสนใจกับคอนโซล — คำขอทั้งหมดที่ดำเนินการโดยไฮเบอร์เนตจะแสดงที่นั่น) คุณสามารถเล่นกับแอปพลิเคชันและลองใช้ฟังก์ชันทั้งหมดได้ ตัวอย่างเช่น สร้างผู้ใช้ด้วยรถยนต์ บันทึกไว้ในฐานข้อมูล ดูรหัสที่กำหนดให้กับผู้ใช้ และลองใช้รหัสนี้ในmain()วิธีการเรียกผู้ใช้จากฐานข้อมูลและแสดงรายการรถบนคอนโซล แน่นอนว่าเราได้เห็นฟังก์ชันการทำงานของ Hibernate เพียงส่วนเล็กๆ เท่านั้น ความสามารถของมันกว้างมากและเป็นเครื่องมืออุตสาหกรรมมาตรฐานสำหรับการพัฒนา Java มาอย่างยาวนาน หากคุณต้องการศึกษาโดยละเอียด ฉันขอแนะนำหนังสือ "Java Persistence API and Hibernate" ฉันได้ตรวจสอบในบทความก่อนหน้านี้ ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับผู้อ่าน หากคุณมีคำถามให้ถามพวกเขาในความคิดเห็น ฉันยินดีที่จะตอบ :) นอกจากนี้อย่าลืมสนับสนุนผู้เขียนในการแข่งขันด้วยการโพสต์ "ถูกใจ" หรือดีกว่านั้น — "รักเลย" :) ขอให้โชคดีในการเรียน!
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ