1.1 Mapping kelas kanggo tabel

Sawise sinau JDBC, sampeyan bisa uga duwe kesan yen nggarap database saka aplikasi Java isih nyenengake. Apa yen aku ngandhani yen kabeh karya iki bisa rampung 10 kaping luwih gampang?

Apa kauntungan utama saka basa SQL? Iki minangka basa deklaratif - nggambarake apa sing dikarepake, lan ora ngomong apa-apa babagan carane nindakake. Carane - iki badhan saka server SQL.

Pendekatan sing padha bisa digunakake nalika nggarap database.

Ing donya becik, kita mung bisa nulis pitakon SQL menyang database, lan kanggo nanggepi kita bakal nampa siap-digawe obyek Jawa, utawa koleksi obyek Jawa, yen kita njaluk sawetara bêsik.

Apa sing bisa dakkandhakake, iki sing dipikirake sawetara wong lanang ing taun 2000 lan mutusake kanggo nulis kerangka ORM dhewe.

ORM singkatan saka Object-Relational Mapping lan ateges pemetaan obyek Jawa menyang pitakon SQL.

Wong lanang teka kanthi prasaja - saben tabel ing basis data kudu cocog karo sawetara kelas ing aplikasi Java . Ing aplikasi Java, kita operate karo obyek, lan obyek iki wis ngerti carane kanggo nyimpen piyambak menyang database.

Ana telung pendekatan kanggo ngrampungake masalah iki, lan katon kaya iki:

  1. Obyek nyimpen dhewe menyang database lan nganyari lapangan adhedhasar informasi saka database.
  2. Obyek bisa nyimpen dhewe menyang database, nanging ora tau miwiti kasus iki.
  3. Objek kasebut mung ngemot data, lan ana sing nyimpen menyang database lan mbukak saka database.

Kaping pisanan, pendekatan pisanan didominasi, banjur server Aplikasi lan Enterprise Java Beans populer. Malah ana kelas kacang buncis sing diarani Persistence EJBs sing bisa nylametake awake dhewe menyang database.

Nanging ing sawijining dina, kabeh owah ...

1.2 Munculé Hibernate

Ing taun 2001, versi pisanan saka kerangka Hibernate dirilis. Iku framework banget prasaja, nanging ngidini nggunakake biasa "obyek bodho" sing ora ngerti apa-apa bab carane padha kudu disimpen ing database utawa dimuat saka ing kono.

Pemetaan lapangan kelas lan kolom Jawa ing tabel ing basis data disetel nggunakake file XML. Lan kadhangkala padha cukup gedhe banget. Oke, sapa aku guyon. Dheweke minangka kanvas kode XML sing akeh banget. Lan kahanan kasebut disimpen mung amarga kasunyatane 20 taun kepungkur ora ana database raksasa kaya saiki.

Nanging nyatane, keputusan sing paling kuat yaiku kanggo misahake obyek sing kudu disimpen ing database saka kode sing disimpen ing kana . Solusi iki ora jelas. Amarga prinsip enkapsulasi nyatakake yen obyek kasebut paling ngerti babagan carane kudu disimpen lan dimuat.

Lan pendekatan ORM pancen ngilangi konsep kasebut. Kelas data mbukak struktur internal, nanging wis dadi luwih gampang kanggo operate karo klompok obyek saka macem-macem jinis.

Terobosan utama teka sawise diluncurake Java 5 , nalika ana rong perkara ing JDK:

  • Anotasi
  • proxy

AnotasiXML iki cepet diganti, lan saiki iku gampang kanggo nemtokake kabeh setelan perlu kanggo pemetaan kelas Jawa kanggo tabel ing database tengen ing kelas Jawa.

proxyora katon banget kanggo pangguna Hibernate, nanging kontribusi kasebut luwih serius. Yen sampeyan njaluk obyek utawa obyek tartamtu saka Hibernate, sampeyan mung bakal menehi stub (proksi), lan nyegat kabeh telpon menyang metode kasebut.

Iki ndadekake bisa ngetrapake macem-macem mekanisme Lazy Loading lan ngunggahake kacepetan lan efisiensi Hibernate menyang tingkat sing paling dhuwur ing wektu kasebut. Hibernate wis dadi ora mung standar industri de facto - wis wiwit diterjemahake menyang basa liya. Dadi, contone, Framework NHibernate muncul kanggo C #.

1.3 Munculé JPA

De facto diterusake kanthi pangenalan de jure. Pangembang JDK mutusake kanggo nggawe spesifikasi babagan cara peta obyek kanthi bener menyang tabel ing basis data. Spesifikasi iki diaraniJPA- Java Persistence API.

Iki persis spesifikasi. Iku nggambarake carane kabeh kudu bisa lan apa anotasi kita kudu menehi tandha bagean beda saka kelas yen kita pengin obyek kanggo disimpen ing database.

Kayane wong lanang mung njupuk Hibernate minangka basis lan ngganti jeneng paket kasebut. Amarga kabeh anotasi sing ana ing Hibernate pindhah menyang JPA meh siji-siji.

Dina iki, Hibernate ngetrapake kabeh spesifikasi JPA kanthi lengkap, uga sawetara fitur tambahan sing nggawe kerjane luwih nyaman. Mula, babagan standarisasi, kita bisa ujar manawa Hibernate duwe rong set fitur:

  • standar JPA
  • Hibernate Native API (fungsi tambahan)

Dokumentasi Hibernate resmi nerangake kaya mangkene:

Nanging loro-lorone adhedhasar pengalaman lan sawise maca maneh dokumentasi Hibernate, aku bisa ujar manawa JPA lan Hibernate API 95% padha. Dheweke mung konsep sing padha.

1.4 Maven kanggo Hibernate

Awit aku wis muji Hibernate dadi luwih, Aku iku wektu kanggo nerusake kanggo nggarap iku sethitik harder.

Kaping pisanan, ana situs resmi, sing mung ana sawetara dokumentasi basa Inggris. Dheweke, mesthi, duwe bias ing informasi referensi, lan ora ing latihan. Nanging isih luwih apik tinimbang debugging sumber, ta? :)

instruksi:

  1. Sampeyan mbukak link .
  2. Sampeyan katon ing dheweke kanggo dangu.
  3. Bali menyang CodeGym.
  4. Sampeyan maca ceramah liyane.

Tugasku yaiku nyederhanakake perkara sing rumit lan nerangake kanthi istilah sing gampang. Lan yen sampeyan wis tekan level iki, aku bisa nindakake.

Dadi, kanggo miwiti Hibernate, sampeyan kudu nambahake menyang pom.xml. Nganti saiki, versi 6 Hibernate wis kasedhiya, utawa luwih 6.1.1, mula kita bakal sinau babagan cara nggarap versi paling anyar.

Cukup tambahake baris iki menyang pom.xml sampeyan:

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

Yen sampeyan maca ceramah iki ing njaba jendela 2023+, banjur versi anyar bisa didownload ing kene .

Penting! Sawetara perpustakaan sing digunakake Hibernate wis ora digunakake ing JDK 11 lan JDK 17, dadi yen sampeyan duwe masalah kanggo miwiti lan mbukak proyek, tambahake dependensi kasebut:

<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>