1.1 Memetakan kelas ke tabel

Setelah mempelajari JDBC, kemungkinan besar Anda memiliki kesan bahwa bekerja dengan database dari aplikasi Java masih menyenangkan. Bagaimana jika saya memberi tahu Anda bahwa semua pekerjaan ini dapat dilakukan 10 kali lebih mudah?

Apa keuntungan utama dari bahasa SQL? Ini adalah bahasa deklaratif - ini menggambarkan apa yang ingin kita dapatkan, dan tidak mengatakan apa pun tentang bagaimana melakukannya. Bagaimana - ini menjadi perhatian dari server SQL.

Pendekatan yang sama dapat digunakan saat bekerja dengan database.

Idealnya, kita cukup menulis kueri SQL ke database, dan sebagai tanggapannya kita akan menerima objek Java siap pakai, atau kumpulan objek Java, jika kita meminta beberapa bagian.

Apa yang bisa saya katakan, inilah yang dipikirkan beberapa orang pada tahun 2000 dan memutuskan untuk menulis kerangka kerja ORM mereka sendiri.

ORM adalah singkatan dari Object-Relational Mapping dan pada dasarnya adalah pemetaan objek Java ke kueri SQL.

Orang-orang datang dengan hal yang sangat sederhana - setiap tabel di database harus sesuai dengan beberapa kelas di aplikasi Java . Dalam aplikasi Java, kami beroperasi dengan objek, dan objek ini sudah mengetahui cara menyimpan dirinya sendiri ke database.

Ada tiga pendekatan untuk memecahkan masalah ini, dan mereka terlihat seperti ini:

  1. Objek menyimpan dirinya sendiri ke database dan memperbarui bidangnya berdasarkan informasi dari database.
  2. Objek dapat menyimpan dirinya sendiri ke database, tetapi tidak pernah memulai kasus ini.
  3. Objek hanya berisi data, dan seseorang menyimpannya ke database dan memuatnya dari database.

Awalnya, pendekatan pertama mendominasi, kemudian server Aplikasi dan Enterprise Java Beans menjadi populer. Bahkan ada seluruh kelas kacang yang disebut Persistence EJB yang dapat menyimpan dirinya sendiri ke dalam database.

Tapi suatu hari semuanya berubah...

1.2 Munculnya Hibernasi

Pada tahun 2001, versi pertama dari framework Hibernate dirilis. Itu adalah kerangka kerja yang sangat sederhana, tetapi memungkinkan penggunaan "objek bodoh" biasa yang tidak tahu apa-apa tentang bagaimana mereka harus disimpan dalam database atau dimuat dari sana.

Pemetaan bidang kelas dan kolom Java dalam tabel di database diatur menggunakan file XML. Dan terkadang mereka cukup besar. Oke, siapa aku bercanda. Itu adalah kanvas besar dari kode XML. Dan situasinya terselamatkan hanya oleh fakta bahwa 20 tahun yang lalu tidak ada database raksasa seperti sekarang.

Namun nyatanya, keputusan yang paling kuat adalah akhirnya memisahkan objek yang perlu disimpan ke database dari kode yang menyimpannya di sana . Solusi ini tidak terlalu jelas. Karena prinsip enkapsulasi menyatakan bahwa objek paling tahu tentang bagaimana ia perlu disimpan dan dimuat.

Dan pendekatan ORM benar-benar merusak konsep itu. Kelas data memaparkan struktur internalnya, tetapi menjadi lebih mudah untuk beroperasi dengan kelompok objek dari tipe yang berbeda.

Terobosan besar muncul setelah Java 5 dirilis , ketika dua hal muncul di JDK:

  • Anotasi
  • proxy

AnotasiXML dengan cepat diganti, dan sekarang mudah untuk menentukan semua pengaturan yang diperlukan untuk memetakan kelas Java ke tabel di database langsung di kelas Java.

Proksitidak begitu terlihat oleh pengguna Hibernasi, tetapi kontribusi mereka bahkan lebih serius. Saat Anda meminta objek atau objek tertentu dari Hibernate, itu hanya mengembalikan stub (proxy) kepada Anda, dan mencegat semua panggilan ke metodenya.

Hal ini memungkinkan untuk menerapkan berbagai mekanisme Lazy Loading dan meningkatkan kecepatan dan efisiensi Hibernate ke tingkat yang sangat tinggi untuk saat itu. Hibernasi tidak hanya menjadi standar industri de facto - ini telah mulai diterjemahkan ke dalam bahasa lain. Jadi, misalnya, Framework NHibernate muncul untuk C#.

1.3 Munculnya JPA

De facto diikuti dengan pengakuan de jure. Pengembang JDK memutuskan untuk membuat spesifikasi tentang cara memetakan objek dengan benar ke tabel dalam database. Spesifikasi ini disebutJPA- API Persistensi Java.

Ini persis spesifikasinya. Ini menjelaskan bagaimana semuanya harus bekerja dan anotasi apa yang kita perlukan untuk menandai berbagai bagian kelas jika kita ingin objeknya disimpan ke database.

Tampaknya orang-orang itu hanya menggunakan Hibernasi sebagai dasar dan mengubah nama paket darinya. Karena semua anotasi yang ada di Hibernate dipindahkan ke JPA hampir satu per satu.

Hari ini, Hibernate sepenuhnya mengimplementasikan seluruh spesifikasi JPA, serta beberapa fitur tambahan yang membuat bekerja dengannya menjadi lebih nyaman. Oleh karena itu, dalam hal standardisasi, kita dapat mengatakan bahwa Hibernate memiliki dua set fitur:

  • standar JPA
  • Hibernate Native API (fungsionalitas tambahan)

Dokumentasi Hibernasi resmi menjelaskannya seperti ini:

Namun berdasarkan pengalaman saya dan setelah membaca kembali dokumentasi Hibernate, saya dapat mengatakan bahwa JPA dan Hibernate API 95% sama. Mereka hanya konsep yang identik.

1.4 Maven untuk Hibernasi

Karena saya sangat memuji Hibernasi, saya pikir sudah waktunya untuk bekerja dengannya sedikit lebih keras.

Pertama, ada situs resmi, di mana hanya ada banyak dokumentasi berbahasa Inggris. Dia, tentu saja, memiliki bias dalam informasi referensi, dan bukan dalam pelatihan. Tapi itu masih lebih baik daripada men-debug sumbernya, bukan? :)

Petunjuk:

  1. Anda membuka link .
  2. Anda menatapnya untuk waktu yang lama.
  3. Kembali ke CodeGym.
  4. Anda membaca kuliah saya selanjutnya.

Tugas saya adalah menyederhanakan hal-hal yang rumit dan menjelaskannya dengan istilah-istilah sederhana. Dan jika Anda telah mencapai level ini, maka saya bisa melakukannya.

Nah, untuk memulai dengan Hibernate, Anda perlu menambahkannya ke pom.xml Anda. Sampai saat ini, Hibernate versi ke-6 sudah tersedia, atau lebih tepatnya 6.1.1, jadi kita akan belajar cara bekerja dengan versi terbaru.

Cukup tambahkan baris ini ke pom.xml Anda:

<dependency>
	<groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
	<version>6.1.1.Final</version>
</dependency>

Jika Anda membaca ceramah ini di luar jendela 2023+, versi baru dapat diunduh di sini .

Penting! Beberapa pustaka yang digunakan Hibernate sudah tidak digunakan lagi di JDK 11 dan JDK 17, jadi jika Anda mengalami masalah dalam menjalankan dan menjalankan proyek, tambahkan dependensi ini ke dalamnya:

<dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
      	<version>4.0.0</version>
</dependency>

<dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
      	<version>4.0.0</version>
</dependency>

<dependency>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>3.29.0-GA</version>
</dependency>