Jadual Kandungan
Apa itu JPA dan mengapa menggunakan Hibernate?
Menyiapkan JPA dengan Hibernate
Membuat entiti pertama anda
Melaksanakan operasi CRUD
Hubungan: Contoh satu-ke-banyak
Amalan terbaik dan perangkap biasa
Melangkah lebih jauh: Integrasi Boot Spring
Rumah Java javaTutorial Kegigihan Java dengan JPA dan Hibernate: Tutorial Lengkap

Kegigihan Java dengan JPA dan Hibernate: Tutorial Lengkap

Jul 26, 2025 am 05:13 AM
java

JPA adalah singkatan API Kegigihan Java, spesifikasi standard untuk pemetaan objek Java ke jadual pangkalan data, dan Hibernate adalah salah satu pelaksanaannya yang paling popular, menyediakan keupayaan pemetaan objek-relasi (ORM) yang memudahkan operasi pangkalan data. 1. JPA mentakrifkan piawaian untuk pemetaan entiti dan operasi CRUD, yang membolehkan pemaju mengendalikan pangkalan data dengan cara yang berorientasikan objek, mengelakkan menulis sejumlah besar kod JDBC. 2. Hibernate, sebagai pelaksanaan JPA, bukan sahaja menyokong spesifikasi JPA, tetapi juga menyediakan ciri -ciri canggih seperti caching, pemuatan malas, dan pengurusan transaksi. 3. Gunakan Maven untuk menambah pemacu hibernate-core dan pangkalan data (seperti H2), dan konfigurasikan sambungan pangkalan data dan sifat hibernat dalam Src/Main/Sumber/Meta-Inf/Kegigihan.xml, seperti HBM2DDL.Auto untuk mengawal strategi penjanaan struktur jadual. 4. Tentukan hubungan pemetaan antara kelas entiti dan jadual pangkalan data melalui @Entity, @table, @id, @GeneratedValue, @column dan anotasi lain. 5. Gunakan EntityManager untuk melaksanakan operasi CRUD. Semua operasi perlu dilakukan dalam transaksi. Berterusan () menjimatkan entiti baru, menggabungkan () mengemas kini entiti yang sedia ada, mencari () pertanyaan mengikut kunci utama, keluarkan () memadam entiti. 6. Sokongan pemetaan hubungan antara entiti, seperti @onetomany dan @manytoOne untuk melaksanakan persatuan satu-ke-banyak, dan mengkonfigurasi operasi cascade melalui Cascade untuk memastikan data yang berkaitan disimpan atau dipadamkan secara serentak. 7. Amalan terbaik termasuk: tepat pada masanya mematikan EntityManager dan EntityManagerFactory untuk mengelakkan kebocoran memori, menulis semula sama () dan hashcode () kaedah, mengutamakan fetchType.lazy untuk mengelakkan masalah prestasi, menggunakan DTO dan bukannya kelas entiti untuk mendedahkan API, dan mengelakkan lazyinitializationexception. 8. Dalam Projek Boot Spring, adalah disyorkan untuk menggunakan data Spring JPA, yang secara automatik memperoleh fungsi CRUD dengan mewarisi antara muka JParepository, dan diuruskan oleh konfigurasi pengurusan musim bunga, urus niaga dan suntikan ketergantungan. 9. Anda boleh memuatkan data yang berkaitan melalui pertanyaan jpql seperti pilih u dari pengguna yang ditinggalkan sertai u.posts untuk mengelakkan pengecualian memuatkan malas. 10. Dalam perkembangan sebenar, kita harus bermula dengan fungsi kecil, secara beransur -ansur meningkatkan entiti, hubungan dan pertanyaan, dan menggabungkan amalan untuk memahami dengan mendalam penggunaan JPA dan Hibernate. Anda kini telah menguasai pengetahuan teras JPA dan Hibernate dan dapat membina aplikasi Java yang berterusan.

Kegigihan Java dengan JPA dan Hibernate: Tutorial Lengkap

Kegigihan Java dengan JPA dan Hibernate adalah kombinasi untuk menguruskan data relasi dalam aplikasi Java. Sama ada anda membina aplikasi Boot Spring atau projek Java yang berdiri sendiri, memahami bagaimana untuk meneruskan data dengan berkesan adalah penting. Tutorial ini membimbing anda melalui asas -asas JPA (Java Constence API) dan Hibernate - salah satu pelaksanaannya yang paling popular - dengan contoh praktikal dan amalan terbaik.

Kegigihan Java dengan JPA dan Hibernate: Tutorial Lengkap

Apa itu JPA dan mengapa menggunakan Hibernate?

JPA (API Kegigihan Java) adalah spesifikasi, bukan pelaksanaan konkrit. Ia mentakrifkan bagaimana objek Java boleh dipetakan ke jadual pangkalan data, dan bagaimana untuk melaksanakan operasi CRUD (membuat, membaca, mengemas kini, memadam) menggunakan sintaks berorientasikan objek dan bukannya SQL mentah.

Hibernate adalah rangka kerja ORM (Object-Relational Mapping) yang lengkap, terbuka yang melaksanakan spesifikasi JPA. Ia menambah ciri -ciri tambahan di luar JPA dan mengendalikan pengangkat berat menterjemahkan objek Java ke rekod pangkalan data dan sebaliknya.

Kegigihan Java dengan JPA dan Hibernate: Tutorial Lengkap

✅ Mengapa menggunakannya bersama?

  • Tulis kod JDBC yang kurang boilerplate
  • Bekerjasama dengan objek Java dan bukannya pertanyaan SQL
  • Leverage anotasi untuk pemetaan mudah
  • Sokongan untuk ciri canggih seperti caching, pemuatan malas, dan urus niaga

Menyiapkan JPA dengan Hibernate

Untuk memulakan, anda memerlukan kebergantungan yang betul. Inilah cara untuk menetapkannya dalam projek Maven:

Kegigihan Java dengan JPA dan Hibernate: Tutorial Lengkap
 <dependencies>
    <geterlihat>
        <groupId> org.hibernate </groupId>
        <stifactid> Hibernate-core </artifactid>
        <versi> 6.4.4.final </versi>
    </ketergantungan>
    <geterlihat>
        <groupId> com.h2database </groupId>
        <ctiFactId> H2 </artifactid>
        <versi> 2.2.224 </versi>
    </ketergantungan>
</dependencies>

Kami menggunakan H2 sebagai pangkalan data dalam memori untuk kesederhanaan, tetapi Hibernate menyokong MySQL, PostgreSQL, Oracle, dan banyak lagi.

Seterusnya, buat fail persistence.xml dalam src/main/resources/META-INF/ :

 <? xml version = "1.0" encoding = "utf-8"?>
<Constence xmlns = "http://xmlns.jcp.org/xml/ns/persistence" version = "3.0">
    <ketekunan-unit name = "my-persistence-unit">
        <creatties>
            <property name = "javax.persistence.jdbc.driver" value = "org.h2.driver"/>
            <property name = "javax.persistence.jdbc.url" value = "jdbc: h2: mem: testdb"/>
            <property name = "javax.persistence.jdbc.user" value = "sa"/>
            <property name = "javax.persistence.jdbc.password" value = ""/>
            <property name = "hibernate.dialect" value = "org.hibernate.dialect.h2dialect"/>
            <property name = "hibernate.hbm2ddl.auto" value = "update"/>
            <property name = "hibernate.show_sql" value = "true"/>
        </hartanah>
    </ketekunan-unit>
</ketekunan>

Harta Utama:

  • hibernate.hbm2ddl.auto : update secara automatik mencipta atau mengemas kini jadual berdasarkan kelas entiti anda. Gunakan none , validate , atau create-drop dalam pengeluaran seperti yang diperlukan.

Membuat entiti pertama anda

Entiti adalah kelas Java yang dipetakan ke jadual pangkalan data. Gunakan anotasi JPA untuk menentukan pemetaan.

 import jakarta.persistence.*;

@Entity
@Table (name = "pengguna")
pengguna kelas awam {

    @Id
    @GeneratedValue (Strategi = GenerasiType.identity)
    ID panjang peribadi;

    @Column (nullable = false)
    nama rentetan peribadi;

    @Column (unik = benar)
    e -mel rentetan peribadi;

    // pembina
    pengguna awam () {}

    pengguna awam (nama rentetan, e -mel rentetan) {
        this.name = name;
        this.email = e -mel;
    }

    // getters dan setters
    public long getId () {return id; }
    public void setID (id panjang) {this.id = id; }

    rentetan awam getName () {return name; }
    public void setName (Nama String) {this.name = name; }

    public string getEmail () {return e -mel; }
    public void setemail (string e -mel) {this.email = email; }

    @Override
    rentetan awam toString () {
        kembali "Pengguna {"  
                "id =" id  
                ", Nama = &#39;" Nama&#39; \ &#39;&#39;  
                ", e -mel = &#39;" e -mel&#39; \ &#39;&#39;  
                &#39;}&#39;;
    }
}

Anotasi dijelaskan:

  • @Entity : Tandakan kelas sebagai entiti JPA.
  • @Table : Pilihan; menyesuaikan nama jadual.
  • @Id : Menentukan kunci utama.
  • @GeneratedValue : Beritahu Hibernate untuk menjana ID secara automatik.
  • @Column : Sesuaikan definisi lajur (kebolehpercayaan, keunikan, dan lain -lain).

Melaksanakan operasi CRUD

Gunakan EntityManager untuk berinteraksi dengan konteks kegigihan.

 import jakarta.persistence.entityManager;
import jakarta.persistence.entityManagerFactory;
import jakarta.persistence.persistence;

Utama kelas awam {
    public static void main (string [] args) {
        EntityManagerFactory emf = constence.createEntityManagerFactory ("my-persistence-unit");
        EntityManager EM = EMF.CreateEntityManager ();

        // buat
        em.getTransaction (). Begin ();
        Pengguna Pengguna = Pengguna Baru ("Alice", "Alice@example.com");
        em.persist (pengguna);
        em.getTransaction (). komit ();

        // Baca
        Pengguna dijumpai = em.find (user.class, 1L);
        System.out.println ("dijumpai:" dijumpai);

        // kemas kini
        em.getTransaction (). Begin ();
        found.setName ("Alicia");
        em.merge (dijumpai);
        em.getTransaction (). komit ();

        // Padam
        em.getTransaction (). Begin ();
        em.remove (dijumpai);
        em.getTransaction (). komit ();

        em.close ();
        EMF.CLOSE ();
    }
}

? Catatan:

  • Sentiasa membungkus operasi pangkalan data dalam urus niaga.
  • persist() menjimatkan entiti baru; merge() mengemas kini yang terpisah.
  • find() mengambil semula entiti dengan id.

Hubungan: Contoh satu-ke-banyak

Kebanyakan aplikasi dunia nyata melibatkan hubungan. Mari tambahkan entiti Post yang dikaitkan dengan User .

 @Entity
Pos Kelas Awam {
    @Id
    @GeneratedValue (Strategi = GenerasiType.identity)
    ID panjang peribadi;

    tajuk rentetan peribadi;

    @Manytoone
    @Joincolumn (name = "user_id")
    pengguna pengguna peribadi;

    // pembina, getters, setters ...
}

Sekarang, User boleh mempunyai beberapa jawatan:

 @Onetomany (mappedBy = "user", cascade = cascadetype.all, orphanRemoval = true)
Senarai Persendirian <Sost> Posts = New ArrayList <> ();

Apabila anda menyimpan pengguna dengan jawatan (dan Cascade diaktifkan), Hibernate menyimpan jawatan secara automatik.

 Pengguna pengguna = pengguna baru ("bob", "bob@example.com");
Post Post1 = Post Baru ("Pos Pertama");
Post Post2 = Post Baru ("Pos Kedua");

pos1.setUser (pengguna);
pos2.setUser (pengguna);
user.getPosts (). Tambah (post1);
user.getPosts (). Tambah (Post2);

em.getTransaction (). Begin ();
em.persist (pengguna);
em.getTransaction (). komit ();

Ini mewujudkan pengguna dan kedua -dua jawatan dalam satu transaksi.


Amalan terbaik dan perangkap biasa

Berikut adalah petua utama untuk mengelakkan masalah biasa:

  • Sentiasa tutup EntityManager dan EntityManagerFactory untuk mengelakkan kebocoran memori.
  • Gunakan equals() dan hashCode() dalam entiti - terutamanya apabila menggunakan koleksi.
  • Elakkan fetchtype.eager secara lalai; lebih suka FetchType.LAZY untuk mengelakkan memuatkan data yang tidak perlu.
  • Jangan mendedahkan entiti secara langsung dalam API - Gunakan DTOS (objek pemindahan data) sebaliknya.
  • Berhati -hati dengan cascade = CascadeType.ALL - ia secara tidak sengaja boleh memadam data yang berkaitan.
  • Inisialisasi koleksi malas di dalam transaksi (sebelum penutupan EntityManager ), atau gunakan JOIN FETCH dalam pertanyaan.

Contoh pertanyaan JPQL untuk mengambil pengguna dengan siaran:

 String jpql = "Pilih U dari Pengguna u Kiri Sertai u.Posts Where u.id =: id";
Pengguna Pengguna = Em.CreateQuery (JPQL, User.class)
              .setParameter ("ID", 1L)
              .getSingleresult ();

Ini mengelakkan "LazyinitializationException".


Melangkah lebih jauh: Integrasi Boot Spring

Dalam projek sebenar, terutamanya dengan Spring Boot, anda tidak akan menggunakan EntityManagerFactory secara langsung. Sebaliknya:

  • Gunakan Spring Data JPA untuk abstraksi repositori
  • Anotate kelas utama anda dengan @SpringBootApplication
  • Tentukan repositori seperti:
 UserRepository antara muka awam memanjangkan JParePository <user, long> {
}

Spring mengendalikan selebihnya - konfigurasi, urus niaga, dan suntikan pergantungan.


Itu sahaja. Anda kini mempunyai asas yang kukuh di JPA dan Hibernate. Daripada mendefinisikan entiti dan hubungan untuk melaksanakan CRUD dan menguruskan urus niaga, anda sudah bersedia untuk membina aplikasi Java yang didorong oleh data yang mantap. Kuncinya adalah amalan - cuba menambah lebih banyak entiti, pertanyaan, dan kekangan untuk memperdalam pemahaman anda.

Pada asasnya, mulakan kecil, biarkan Hibernate melakukan kerja, dan belajar semasa anda pergi.

Atas ialah kandungan terperinci Kegigihan Java dengan JPA dan Hibernate: Tutorial Lengkap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Membaca dari Stdin dalam Contoh Membaca dari Stdin dalam Contoh Jul 27, 2025 am 04:15 AM

Gunakan fmt.scanf untuk membaca input diformat, sesuai untuk data berstruktur yang mudah, tetapi rentetan dipotong ketika menghadapi ruang; 2. Adalah disyorkan untuk menggunakan bufio.scanner untuk membaca garis demi baris, menyokong input berbilang baris, pengesanan EOF dan input saluran paip, dan boleh mengendalikan kesilapan pengimbasan; 3. Gunakan io.readall (os.stdin) untuk membaca semua input sekaligus, sesuai untuk memproses data blok besar atau aliran fail; 4. Sambutan utama masa nyata memerlukan perpustakaan pihak ketiga seperti golang.org/x/term, dan Bufio mencukupi untuk senario konvensional; Cadangan Praktikal: Gunakan fmt.scan untuk input mudah interaktif, gunakan bufio.scanner untuk input baris atau saluran paip, gunakan io.readall untuk data blok besar, dan sentiasa mengendalikan

Panduan Lengkap ke kelas Java `Pilihan` Panduan Lengkap ke kelas Java `Pilihan` Jul 27, 2025 am 12:22 AM

Pilihan adalah kelas kontena yang diperkenalkan oleh Java 8 untuk pengendalian yang lebih selamat dari nilai -nilai yang berpotensi null, dengan tujuan terasnya adalah dengan jelas "nilai hilang" dan mengurangkan risiko nullPointerexception. 1. Buat contoh kosong menggunakan optional.empty (), optional.of (nilai) membungkus nilai non-null, dan optional.ofnullable (nilai) dengan selamat membungkus nilai null. 2. Elakkan menggabungkan ispresent () dan dapatkan () secara langsung. Anda harus memberi keutamaan untuk menggunakan Orelse () untuk memberikan nilai lalai. Orelseget () melaksanakan pengiraan kelewatan. Kaedah ini disyorkan apabila nilai lalai adalah overhead.

Pilihan pengkomputeran tanpa pelayan SQL Pilihan pengkomputeran tanpa pelayan SQL Jul 27, 2025 am 03:07 AM

SQLServer sendiri tidak menyokong seni bina tanpa pelayan, tetapi platform awan menyediakan penyelesaian yang sama. 1. Kolam ServerlessSQL Azure boleh secara langsung menanyakan fail Datalake dan caj berdasarkan penggunaan sumber; 2. 3. Awsathena menyokong pertanyaan SQL standard untuk data S3, dan caj berdasarkan data yang diimbas; 4. GooglebigQuery mendekati konsep tanpa pelayan melalui FederatedQuery; 5. Sekiranya anda mesti menggunakan fungsi SQLServer, anda boleh memilih perkhidmatan tanpa pelayan AzuresqLdatabase

Python semak jika kunci wujud dalam contoh kamus Python semak jika kunci wujud dalam contoh kamus Jul 27, 2025 am 03:08 AM

Adalah disyorkan untuk menggunakan kata kunci untuk memeriksa sama ada kunci wujud dalam kamus, kerana ia adalah ringkas, cekap dan sangat mudah dibaca; 2. Ia tidak disyorkan untuk menggunakan kaedah GET () untuk menentukan sama ada kunci wujud, kerana ia akan salah apabila kunci wujud tetapi nilai tidak ada; 3. Anda boleh menggunakan kaedah kekunci (), tetapi ia berlebihan, kerana secara lalai untuk memeriksa kunci; 4. Apabila anda perlu mendapatkan nilai dan kunci yang dijangkakan biasanya wujud, anda boleh menggunakan cuba-kecuali untuk menangkap pengecualian KeyError. Kaedah yang paling disyorkan ialah menggunakan kata kunci, yang selamat dan cekap, dan tidak terjejas oleh nilai tiada, yang sesuai untuk kebanyakan senario.

Persediaan VSCode untuk Pembangunan Java Persediaan VSCode untuk Pembangunan Java Jul 27, 2025 am 02:28 AM

Installjdk, setjava_home, InstalljavaextensionPackinvscode, createoropenamaven/gradleProject, memastikanprojectstructure, anduseBuilt-inrun/debugfeatures;

Mengoptimumkan interaksi pangkalan data dalam aplikasi Java Mengoptimumkan interaksi pangkalan data dalam aplikasi Java Jul 27, 2025 am 02:32 AM

Useconnectionpoolingwithhikaricptoreusedatabaseconnectionsandreduceoverhead.2.UsePreparedStatementTopreventsqlinjectionAndroveProveQueryperformance.3.fetchonLyRequiredDataByselectingsPecificColumnSandapplyFilation.4.Se

Corak integrasi awan java dengan awan musim bunga Corak integrasi awan java dengan awan musim bunga Jul 27, 2025 am 02:55 AM

Menguasai model integrasi Springcloud adalah penting untuk membina sistem yang diedarkan moden. 1. Pendaftaran dan Penemuan Perkhidmatan: Pendaftaran dan penemuan perkhidmatan automatik direalisasikan melalui Eureka atau Springcloudkubernetes, dan pengimbangan beban dilakukan dengan reben atau loadbalancer; 2. 3. API Gateway: Gunakan Springcloudgateway untuk menyatukan entri, kawalan penghalaan dan pengurusan kebenaran, dan menyokong pengehadan dan pembalakan semasa; 4. Penjejakan pautan yang diedarkan: Menggabungkan sleuth dan zipkin untuk merealisasikan proses penuh permintaan visual.

Memahami Panggilan Sistem Linux Memahami Panggilan Sistem Linux Jul 27, 2025 am 12:16 AM

Panggilan sistem adalah mekanisme di mana program pengguna meminta operasi istimewa melalui antara muka kernel. Aliran kerja adalah: 1. Program pengguna memanggil fungsi enkapsulasi; 2. Tetapkan nombor panggilan sistem dan parameter kepada daftar; 3. Melaksanakan arahan syscall dan jatuh ke dalam negeri kernel; 4. Melaksanakan fungsi pemprosesan yang sepadan dalam jadual semak; 5. Kembali ke keadaan pengguna selepas pelaksanaan. Anda boleh menggunakan alat Strace untuk mengesan, terus panggil fungsi SYSCall () atau periksa fail header Unitd.H untuk melihat nombor panggilan. Anda perlu ambil perhatian bahawa perbezaan antara panggilan sistem dan fungsi perpustakaan adalah sama ada mereka memasuki keadaan kernel, dan panggilan yang kerap akan menjejaskan prestasi. Anda harus mengoptimumkan dengan menggabungkan I/O, menggunakan kaedah MMAP dan Epoll, dan pemahaman panggilan sistem akan membantu anda menguasai mekanisme operasi asas Linux.

See all articles