1.1 Osztályok hozzárendelése táblázatokhoz
A JDBC elsajátítása után valószínűleg az a benyomása, hogy a Java-alkalmazásokból származó adatbázisokkal továbbra is élvezetes dolgozni. Mi lenne, ha azt mondanám, hogy mindezt a munkát 10-szer könnyebben meg lehetne csinálni?
Mi az SQL nyelv fő előnye? Ez egy deklaratív nyelv – leírja, hogy mit szeretnénk elérni, és egyáltalán nem mond semmit arról, hogyan tegyük ezt. Hogyan – ez az SQL szerver gondja.
Ugyanez a megközelítés használható adatbázisokkal való munka során.
Egy ideális világban egyszerűen SQL lekérdezéseket írhatnánk az adatbázisba, és válaszul kész Java objektumokat, vagy Java objektumok gyűjteményeket kapnánk, ha több darabot kérnénk.
Mit ne mondjak, ezt gondolták többen is 2000-ben, és úgy döntöttek, megírják saját ORM keretrendszerüket.
Az ORM az Object-Relational Mapping rövidítése , és lényegében Java objektumok leképezése SQL lekérdezésekre.
A srácok egy nagyon egyszerű dolgot találtak ki: az adatbázisban minden táblának meg kell felelnie a Java alkalmazás valamelyik osztályának . Java alkalmazásokban objektumokkal dolgozunk, és ezek az objektumok már tudják, hogyan kell magukat az adatbázisba menteni.
Három megközelítés létezik a probléma megoldására, és valahogy így néztek ki:
- Az objektum elmenti magát az adatbázisba, és az adatbázisból származó információk alapján frissíti a mezőit.
- Az objektum képes menteni magát az adatbázisba, de soha nem kezdeményezi ezt az esetet.
- Az objektum csak adatokat tartalmaz, és valaki elmenti az adatbázisba, és betölti az adatbázisból.
Kezdetben az első megközelítés dominált, majd az alkalmazásszerverek és az Enterprise Java Beans váltak népszerűvé. Még a Persistence EJB-nek nevezett babok egész osztálya is létezett, amelyek maguk menthetik be magukat az adatbázisba.
De egy napon minden megváltozott...
1.2 Hibernált állapot kialakulása
2001-ben adták ki a Hibernate keretrendszer első verzióját. Ez egy nagyon egyszerű keretrendszer volt, de lehetővé tette a hétköznapi "hülye objektumok" használatát, amelyek semmit sem tudtak arról, hogyan kell őket az adatbázisban tárolni, vagy onnan betölteni.
A Java osztályok mezőinek és oszlopainak leképezése egy táblában az adatbázisban XML fájl segítségével történt. És néha meglehetősen terjedelmesek voltak. Oké, kit viccelek. Hatalmas XML-kód vásznak voltak. A helyzetet pedig csak az mentette meg, hogy 20 éve még nem voltak olyan gigantikus adatbázisok, mint most.
Valójában azonban a legerősebb döntés az volt, hogy végre elválasztottuk az adatbázisba mentendő objektumot a kódtól, amely azt oda mentette . Ez a megoldás nem igazán egyértelmű. Mert a beágyazás elve kimondja, hogy az objektum tudja a legjobban, hogyan kell menteni és betölteni.
És az ORM megközelítés valóban megtöri ezt a koncepciót. Az adatosztály feltárja belső struktúráját, de sokkal könnyebbé vált a különböző típusú objektumok csoportjaival való működés.
A nagy áttörés a Java 5 megjelenése után következett be , amikor két dolog jelent meg a JDK-ban:
- Annotációk
- meghatalmazott
AnnotációkAz XML-t gyorsan kiszorították, és most már könnyen megadható volt az összes szükséges beállítás egy Java osztálynak az adatbázisban lévő táblázathoz való leképezéséhez közvetlenül a Java osztályban.
Meghatalmazotta Hibernate felhasználó számára nem volt annyira észrevehető, de a hozzájárulásuk még komolyabb volt. Amikor egy adott objektumot vagy objektumokat kér a Hibernate szolgáltatásból, az egyszerűen visszaad egy csonkot (proxyt), és elfogja a metódusaira irányuló összes hívást.
Ez lehetővé tette a különböző Lazy Loading mechanizmusok megvalósítását, és a Hibernate sebességét és hatékonyságát akkoriban teljesen egekbe emelte. A Hibernate nemcsak de facto iparági szabvánnyá vált, hanem más nyelvekre is elkezdték lefordítani. Így például megjelent a Framework NHibernate a C# számára.
1.3 A KPK megjelenése
De facto de jure elismerés követi. A JDK fejlesztői úgy döntöttek, hogy létrehoznak egy specifikációt arra vonatkozóan, hogyan kell megfelelően leképezni az objektumokat egy adatbázis tábláira. Ezt a specifikációt únJPA- Java Persistence API.
Pontosan ez a specifikáció. Leírja, hogyan kell mindennek működnie, és milyen megjegyzésekkel kell jelölnünk az osztály különböző részeit, ha azt szeretnénk, hogy az objektumai az adatbázisba kerüljenek.
Úgy tűnik, a srácok csak a Hibernate-ot vették alapul, és abból változtatták meg a csomagneveket. Mert az összes hibernált jegyzet szinte egyenként átkerült a JPA-ba.
Ma a Hibernate teljes mértékben megvalósítja a teljes JPA specifikációt, valamint néhány további funkciót, amelyek még kényelmesebbé teszik a vele való munkát. Ezért a szabványosítás szempontjából elmondhatjuk, hogy a Hibernate két funkciókészlettel rendelkezik:
- JPA szabvány
- Hibernate Native API (további funkciók)
A hivatalos Hibernate dokumentáció a következőképpen írja le:
De mind a tapasztalataim alapján, mind a Hibernate dokumentációjának újraolvasása után azt mondhatom, hogy a JPA és a Hibernate API 95%-ban megegyezik. Ezek csak egyforma fogalmak.
1.4 Maven for Hibernate
Mivel nagyon dicsértem a Hibernate-et, úgy gondolom, ideje egy kicsit keményebben dolgozni vele.
Először is van egy hivatalos oldal, ahol csak egy csomó angol nyelvű dokumentáció található. Természetesen elfogult a referenciainformációk terén, és nem a képzésben. De még mindig jobb, mint a források hibakeresése, igaz? :)
Utasítás:
- Megnyitod a linket .
- Hosszan nézel rá.
- Visszatérve a CodeGymhoz.
- Olvassa el további előadásaimat.
Az én feladatom az, hogy leegyszerűsítsem az összetett dolgokat, és egyszerű szavakkal elmagyarázzam azokat. És ha elérted ezt a szintet, akkor meg tudom csinálni.
Nos, a Hibernate használatának megkezdéséhez hozzá kell adnia a pom.xml fájlhoz. A mai napig a Hibernate 6. verziója már elérhető, vagy inkább a 6.1.1, így megtanuljuk, hogyan kell dolgozni a legújabb verzióval.
Csak adja hozzá ezeket a sorokat a pom.xml fájlhoz:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.1.1.Final</version>
</dependency>
Ha 2023+ ablakon kívül olvassa ezt az előadást, akkor az új verzió innen tölthető le .
Fontos! A Hibernate által használt könyvtárak némelyike a JDK 11-ben és a JDK 17-ben elavult, ezért ha gondjai vannak a projekt elindításával és futtatásával, adja hozzá a következő függőségeket:
<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>
GO TO FULL VERSION