Grigoryev alexei személyes weblapja - hibernálják a hibernálást vagy elkezdődnek

Hibernálás: ismét hibernált vagy elkezdődött

Hibernate - olyan technológia, amely lehetővé teszi, hogy működjön együtt a szervezetek egy adatbázisban, mintha a helyi tárgyakat eltérő módon - ORM (Object-relációs leképezés) kötődése az adatbázis-objektumok, ami a „virtuális objektum adatbázis”.

Például a hibernált vonalban

Menteni fogja a könyvet az adatbázisban. Kényelmes? Ez elég kényelmes ahhoz, hogy eltöltsön egy kis időt a technológia tanulmányozására.

Szóval, a vágás alatt, még egy számlára a "Hibernálás: kezdet" sorozatban és egy teljesen működőképes példa.

Felkészült

Maga a hibernálás letölthető a hivatalos weboldalról, de a szükséges könyvtárak nem minden szükséges munkát biztosítanak. De még mindig javaslom letölteni, mert van dokumentáció, és ez idő alatt egy új verzió jöhet ki.

Először is röviden leírom, hogyan működik ez. A programban olyan osztályokat hozunk létre, amelyek az adatbázisunk entitásaihoz kapcsolódnak. Az angol irodalom, ilyen osztályokat nevezzük POJO - öreg java odjects. Ez tartalmaz egy sor saját területen, mindegyikre van egy getter és setter, az alapértelmezett konstruktor (paraméterek nélkül), valamint bármely más tervezők, mint kívánatos. Általában ez elegendő az ilyen osztályok számára.

A Java osztályok az adatbázisban lévő táblákhoz kapcsolódnak egy speciális leképezési fájl segítségével, amely meghatározza, hogy mely oszlopok mely oszlopok felelnek meg az adatbázisnak.

Amikor először lép be hibernálva, a Hibernate.cfg.xml fájl összes beállítását elolvassa. ahol az adatbázishoz, a bejelentkezéshez / jelszóhoz tartozó kapcsolódási karakterlánc tárolódik, a leképezési fájlok elérési útvonalai meg vannak adva.

További funkciók végrehajtása a megfelelő alkalmazás az üzleti logika, de ezek végrehajtása hagy sokkal kevesebb ideje, mint a hagyományos JDBC - elvégre kölcsönhatás csökkenti programozó dolgozni „helyi” helyszínek és időszakos megőrzése.

Hát, kezdjük

DBMS-ként MySQL-t használok.

Most kezdjük el a Java osztályok létrehozását - ugyanazokat a szervezeteket, amelyek ugyanazokkal a kapcsolatokkal rendelkeznek, mint az adatbázisunkban. Ez lesz a könyv, a szerző, az olvasó és az osztályok használata. Ők rejtett mezőket fognak találni, az egyes entitások pontosan az adatbázisunkban, a gyűjtők és a beállítók készletében, valamint a konstruktorok készítésében (egy olyan alapértelmezett konstruktornak lehetünk, amely nem tartalmaz érveket).

Részben idézem ezeket az osztályokat:

Osztályokat egy bázissal társítunk

Most itt az ideje mondani hibernált, hogy ezek az osztályok az adatbázisból származó entitások objektum-feltérképezése. Ehhez használjon speciális leképezési fájlokat, amelyek egy utasítás-készletből álló xml-fájlok.

Az utasításokat a címkék tartalmazzák , amely tartalmazza

jelzi, mely kulcsmezőt kell használni a kommunikációhoz;

jelzi az entitás és a másik közötti kapcsolat sokféleségét, ebben a példában sok-sok-sok.

Mindegyik címke rendelkezik saját paraméterekkel, amelyeket legjobban egy példa szemléltet:

Minden mezőnek van egy címkéje

jelezve, hogy az adatbázistábla mely oszlopa adja ezt a tulajdonságot;

Adom meg azokat a fájlokat, amelyek leírják ezeket a linkeket:

Még mindig van egy egy-egy kapcsolat, de tekintettel arra, hogy szinte nem használják, figyelmen kívül hagyom.

Emellett felhívom a figyelmet arra a tényre, hogy sok-sok-sok kommunikáció megvalósításakor az opció egy hivatkozással az AUTHORSBOOKS köztes táblára mutat. nem az AUTHOROK-nál.

De nem feltétlenül levelet mindezt kézzel - minden tette számunkra. Ha telepítette a plug-in Eclipse, akkor létre ezeket a fájlokat kódgenerátor kattintva a csomag a kívánt tárgyat a jobb egérgombbal, válassza ki az új -> más ... és a lista hibernálni által «hibernált leképezési fájl». Mi jelöljük ki a szükséges osztályokat a generáció és nézd meg az eredményt.

Másodszor, egy automatikus növekményes kulcsmezőt használunk, és nem adjuk meg magunkat, ezért a paraméterben mindenhol megváltoztatjuk a hozzárendelt natív értéket.

Harmadszor, ez nem teremt sok-sok kapcsolatot, ezért az eredményt tollal szabályozzuk.

testreszabható

Most be kell állítanunk a hibernálást, meg kell adnunk azt, hogy melyik adatbázisot használjuk, mely kártya fájlokat kell csatlakoztatnunk.

Itt van a konfigurációs fájlom, azt hiszem benne, és így minden világos. Először lépjen be a kapcsolatbeállításokhoz, majd adja meg a térképekkel ellátott fájlok elérési útját. A kódolással kapcsolatos opciót akkor kell megadni, ha a projekt Cyrillicot használ, különben az összes orosz karakter a MySQL-t egy sor kérdőjelként fogja elérni.

Ha a show_sql tulajdonság értékét true értékre állítja, akkor minden lekérdezést visszaad az stdout-nak. Ha látni szeretné, hogyan működik, akkor a legjobb, ha igazra hagyja.

Ezt a fájlt az összes forrásfájl gyökérkönyvtárában kell elhelyezni, a projekt esetében pedig az eclipse esetében a mappa src /. Felhívjuk a hibernate.cfg.xml címre.

Most létrehozunk egy speciális munkamenet-kezelőt a hibernáláshoz. Ehhez egy külön csomagot hozunk létre, egy osztályban és írunk:

Amikor a getSessionFactory () metódust hívják, a hibernálás inicializálásra kerül, elolvassa az összes beállítást, az objektumokat az adatbázis tábláihoz kapcsolja.

programozható

Tehát határozzuk meg, milyen módszerekkel tudunk dolgozni az adatbázisban lévő rekordokkal. Például:

  • hozzátéve;
  • törlése;
  • megváltoztatni;
  • az egész lista beszerzése;
  • az elemet id szerint;

Hozzon létre egy felületet, amely leírja ezeket a funkciókat. Az interfész egy általánosított képet hoz létre:

Végrehajtjuk ezt az interfészt.

Teljesen itt nem fogom vezetni, az érdeklődők letölthetik a csatolt forráskódot és a rummage benne. Csak azt mondom, hogy a Session osztály alábbi módszerei használhatók az adatbázisban való közreműködésre:

session.save (el); - mentse el az elemet az adatbázisba;
session.update (el); - Frissítse az elemet;
session.delete (el); - törölni;
session.saveOrUpdate (el); - menteni vagy frissíteni;
el = (E) session.get (elementClass, elíd); - szerezzük be az elemet id;
els = session.createCriteria (elementClass) .list (); - az összes elem felsorolása.

Ennek az interfésznek a végrehajtásakor valamilyen trükket alkalmaztam - figyeljen a tervezőre. Megszerzése osztály (objektumtípus osztály segítségével E.class string típusú) a java nem lehetséges, de a kölcsönhatás az adatbázist a Hibernia pontosan útján osztályok - a feltételek szerint melyik osztályba kell megszerezni. Ezért egy olyan konstruktort hoztak létre, amely paraméterként egy típusú objektumot vesz fel. Vegye figyelembe, hogy ElementDAOImpl osztály nem célja a közvetlen felhasználásra, de lehet örökletes, és kifejezetten meg kell határozni, hogy milyen típusú elemet. Például:

Tehát végrehajtottam az összes többi osztályt.

Most hozzon létre egy osztályt, amely lehetővé teszi az adatok közvetlen manipulálását:

Most dolgozhat az adatbázisban:

Ez a funkciócsoport azonban egyáltalán nem az, amit szeretnénk. Inkább, de csak nagyon kevés. Ezért az alkalmazás adott üzleti logikájához tartozó funkciókat kell végrehajtani. Például:

  • adj egy sor könyvet egy szöveges fájlból;
  • adjon egy könyvet;
  • fogadja el a könyvet;
  • Találd meg az összes olyan könyvet, amit az olvasó valaha is tett;
  • megtalálja az összes lejárt könyvet;

Hibernált állapotban háromféleképpen lehet mintavételt készíteni egy adatbázisból.

  • A lekérdező nyelv használata HQL;
  • A Criteria API használata;
  • A normál SQL használatával.

Vegyük figyelembe ezeket az opciókat külön-külön.

A HQL nagyon hasonlít a normál SQL-re, a fő különbség abban áll, hogy a lekérdezés objektumként formálódik. Jobban adnék néhány példát:

Egy másik érdekes példa, amelyben egy lekérdezés eredményeként objektum jön létre:

Természetesen az objektumnak ilyen konstruktornak kell lennie, egyébként hibernálja a káromokat, mondván, hogy nem talált megfelelő konstruktort. Az sql és a java keverékét kapjuk.

Igen, elfelejtettem azt mondani, hogy a lekérdezés paraméterei a függvényhívás használatával vannak helyettesítve

Kapcsolódó cikkek