Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaLőrinc Szalai Megváltozta több, mint 10 éve
1
Hibernate Nem ezzel nem lehet embereket hibernálni! DE akkor mit lehet? A válasz pedig ezekben a diákban rejlik.
2
Mi a Hibernate?! Relációs perzisztencia Javához és .NET-hez
A Hibernate egy nagy teljesítményű objektumrelációs perzisztencia és adatbázis lekérdező (query) szolgáltatás. A Hibernate lehetővé teszi az objektum-orientált elvet követő perzisztens osztályok létrehozását beleértve az asszociációt, öröklődést, polimorfizmust, kompozíciót, kollekciót. A Hibernate segítségével saját, hordozható SQL kiterjesztésében (HQL) is történhet a lekérdezés, valamint natív SQL-ben is, vagy pedig objektum-orientált Criteria és Example API segítségével. Más perzisztencia megoldásoktól eltérően a Hibernate nem rejti véka alá az SQL erejét és garantálja, hogy a relációs technológiába és tudásba tett befektetés mindig érvényes marad. Az LGPL nyílt forráskódú licenc a Hibernate és NHibernate használatát nyílt forráskódú valamint kereskedelmi projektekben is lehetővé teszi. A Hibernate egy professzionális nyílt forráskódú projekt, és egyben a JBoss Enterprise Middleware System (JEMS) termékek kiemelkedő része is. Mivel a JBoss a Red Hat divíziójává vált, így a Red Hat-től megszokott professzionális támogatást élvezhetik a felhasználók.
3
Mi a Hibernate?!(Röviden)
A Hibernate egy rendkívül kényelmes JPA alapú ORM rendszer. Az ember létrehoz néhány felcímkézett osztályt, és ide tárolja az adatokat. A Hibernate pedig szinte láthatatlanul elvégzi az adatbázis leképzést, és a kapcsolódó adatbázis műveleteket.
4
Mi a Hibernate?!(Röviden)
Híd az objektumorientált és a relációs szemlélet között Réteg a DB és az alkalmazás között A JEMS (JBoss Enterprise Middleware System) része Nyílt forráskód A leképezéssel kapcsolatos munka 95% át megspórolja Támogatja: OO perzisztens osztályok kezelése, asszociációt, öröklődést, polimorfizmust, kompozíciót, kollekciót
5
A Hibernate története A Hibernate 2001-ben lett elsőként kiadva mint egy alternatív EJB2 stílusu entitás „babok”. 2003-ban a Hibernate2 kiadásra került mely rengeteg hibajavítást és újítást tartalmazott az első verzióhoz képest. A legutolsó verzió pedig a 2010-es ös. Viszont már készül a 4.0-ás verzió melynek az alpha verziója már letölthető és tesztelhető.
6
Hibernate telepítése A JDK 1.5 vagy magasabb verzió szükséges a telepítéshez illetve a Hibernate core 3.6-os kell hibernate3.jar-nak a project mappában kell szerepelnie. A lib/required/ mappa tartalmazza a JAR fileokat amihez a Hibernate-nek szüksége van. Az összes jar ebben a mappában szintén benne kell lennie a project mappájában. The /lib/jpa/ mappa tartalmazza a JPA API JAR-t. Ennek a JAR file-nak szintén benne kell legyen a projectmappában ha használni akarod a JPA API-kat vagy a JPA magyarázatokat.
7
Hibernate telepítése Ha le akarjuk „buildelni” a programot ahhoz még szükségünk van Maven-re. Van viszont egy másik gyorsabb módja is a Hibernate telepítésének ez pedíg a NetBeans rendszer. Egyszerűen meglátogatjuk a netbeans.org –ot, letöltjük és telepítjük a programot és amikor javas alkalmazast kezdünk írni a framework-nel (keretrendszer) kivalasztjuk hogy adja hozza a hibernatet.
8
A hibernate müködése
9
Paradigma ütközés/Granularitás
10
Paradigma ütközés/Granularitás
Cím mint Külön tábla Külön oszlopok Külön típus User Defined Type – SQL kiterjesztés Oszlopként
11
Öröklődés/Polimorfizmus
Hogyan tároljuk le? Polimorfikus lekérdezés?
12
Azonosítás Java SQL Referencia szerint (==) Érték szerint (Equals())
Elsődleges kulcs Mi legyen az? Név? Független kulcs?
13
Viszonyok Java M:M SQL 1:M 1:1
14
Navigáció Navigáció? Java egzakt SQL tetszőleges:
Obejktum gráf bejárás x.d.g.getZ(); SQL tetszőleges: N+1 select problémája Minimalizálni kell a kérések számát – join Előre kell tudnunk mit akarunk lekérni User User join Billing details
15
Az eltérés ára 30% a programozó idejéből
Bonyolult adatbázis absztrakciós réteg Projekt bukás lehet Az objektum réteg átalakítása, hogy megfeleljen a relációs rétegnek JDBC Strukturális kényszereket legalább háromszor meg kell adni (insert/update/delete) DAO
16
Architektúra
17
Architektúra
18
Architektúra
19
Fogalmak: SessionFactory (net.sf.hibernate.SessionFactory): Egy tárolóhely a lefordított mappingek részére. Innen érhető el a Session és a ConectionProvider. Tartalmazhat egy másod-szintű tárolót, ami a tranzakciók között használhatók fel processz vagy klaszterszinten. Session (net.sf.hibernate.Session): Ez egy rövid életű objektum, ami egy kapcsolatot reprezentál a tároló és az applikáció között, Magába foglal egy JDBC kapcsolatot. Innen kérhetőek el a tranzakció objetumok. Egy elsőszintű tároló tartozik hozzá a perzisztens objektumok számára. Amikor lépkedünk az objektum gráfban, vagy azonosító alapján keresünk, akkor van rá szükség. Perzisztens Objektumok: Szintén rövid életű objektumok, amelyek pontosan 1 session-el vannak kapcsolatban. Amikor a session bezárul, akkor szabaddá válnak és más applikációs szintek is használhatják. Tranziens Objektumok: Akkor beszélünk tranziens objektumokról amikor még sohasem voltak elmentve (tehát még nem voltak perzisztensek), így például ezeknek általában még nincs azonosítójuk.
20
Fogalmak: Tranzakció (net.sf.hibernate.Transaction): Rövid életű objektum ami egy atomi egységet valósít meg (tehát vagy teljesül az összes művelet vagy egyik sem, ha valamilyen hiba folytán nem teljesül akkor vissza kell tudni vonni a már bekövetkezett módosításokat). Egy session-ben több tranzakció is megvalósulhat. ConnectionProvider (net.sf.hibernate.connection.ConnectionProvider): Innen kérhetjük el a JDBC kapcsolatokat (itt a kapcsolatok tárolódnak is). Leválasztja az alkalmazást az alsóbb rétegektől (DataSource, DriverManager). A fejlesztő által implementálható. TransactionFactory (net.sf.hibernate.TransactionFactory): Itt kérhetjük el a tranzakció objektumokat. A fejlesztő által implementálható.
21
Hibernate- felépítés 3 rész: Java osztály
Relációs adatbázisbeli táblák Leíró (descriptor) Definiálja a konverziós szabályokat A nyelvezete inkább java-centrikus 2 fajtája van: Xml file (*.xml.hbm kiterjesztés) Annotáció Sokan kézzel szerkesztik pedig XDoclet, Middlegen, AndroMDA.
22
Példaprogram elkészítése NetBeans fejlesztői környezetben.
Projekt létrehozása NetBeans-ben létre kell hozni egy Java Application projektet Hibernate Hello World néven. A projekt gyökérkönyvtárában hozz létre egy lib nevű könyvtárat. Ide érdemes összegyűjteni az összes szükséges jar-t. Másold be a mellékelt Hibernate és az adatbázis meghajtó jar-okat. Ezután a könyvtár tartalmát add hozzá a projekt libraries-hez.
28
Példaprogram elkészítése NetBeans fejlesztői környezetben.
Adatbázis példány létrehozása A Services panelben a Databases fült megnyitva lehet látni a regisztrált adatbázis kezelőket és az adatbázis kapcsolatokat. Itt a Java DB adatbázis szerverre jobb egérgombbal kattintva, Create Database menüt választva hozz létre egy új adatbázist. A példában az adatbázis neve HibernateHelloWorld lesz, felhasználói név user, jelszó password. Ha sikerült létrehozni az adatbázist akkor a kapcsolatok közt annak meg kell jelennie. A HibernateHelloWorld kapcsolatára jobb klikk, és connect. Ezután lehet az adatbázis sémában böngészni, lekérdezni a táblák tartalmát, újakat létrehozni, SQL szkripteket futtatni stb. Jelenleg pár rendszertáblát leszámítva mást nem látunk.
31
Példaprogram elkészítése NetBeans fejlesztői környezetben.
A Hibernate konfigurálása Az egész Hibernate rendszert érintő beállításokat a hibernate.cfg.xml állományban kell megadni. Ezt az src könyvtárba kell rakni. Itt kell megadni az adatbázist amihez szeretnénk kapcsolódni(url, név, jelszó), az adatbázis JDBC driver-ét, és az adatbázis kezelő dialektusát. Ez utóbb azért szükséges, mert a különböző DMBS gyártók különféle SQL nyelvjárást beszélnek, de a Hibernate-on keresztül egységes módon tudjuk kezelni az adatainkat és ehhez meg kell adni a konverziót végző dialektus osztályt. Hibakeresésnél jól jöhet, ha látjuk milyen sql utasításokkal kommunikál a Hibernate az adatbázissal. Erre 3 property is van. Van egy hasznos segédprogram, amivel a entitás osztályok alapján lelehet generálni az adatbázis sémát. Ez a hbm2ddl.auto, amit minden SessionFactory létrehozáskor törli az adatbázist, és újragenerálja az üres sémát. Érdemes ezzel legenerálni a sémát, és ha nem szeretnénk, hogy letörölje az adatbázist, akkor a következő indítás előtt kommentezzük ki a sorát az xml ben. A példa alkalmazás Hibernate Log4j-t használ a belső eseményeinek logolásásra. Ezért a hibernate.cfg.xml mellé még egy log4.xml állományt is kell készítenünk. Ezt is helyezzük be az src könyvárba.
33
Példaprogram elkészítése NetBeans fejlesztői környezetben.
Entitások készítése Egyszerű alkalmazás révén csak egyetlen entitás osztályt fogunk létrehozni. Legyen a neve Ismeros és tárolja le a nevét, lakhelyét, és a születési dátumát. Követlejük meg, hogy egy ismerősnek mindig legyen neve (nem null megszorítás), és ez mindenkinél legyen más (unique megszorítás). A születési dátum az évet, hónapot és a napot tartalmazza. Létre kell hozni egy Ismeros nevű osztályt, a definíció felett annotációval. Ezzel jelezzük, hogy ez egy adatbázisba leképezett osztály. A hibernate.cfg.xml-ben minden ellátott osztályt regisztrálni kell (mapping tag)
37
Példaprogram elkészítése NetBeans fejlesztői környezetben.
A névhez, lakcímhez és születési időhöz létre kell hozni a megfelelő getter és setter metódust. Ezeken keresztül fogjuk mi, és a hibernate kezelni az objektumot. A Hibernate automatikusan leképezi a property-ket, de ha plusz információt akarunk megadni, akkor a getter felé kell helyezni a megfelelő annotációt. lehet a generálandó tábla oszlopára információkat adni. pl. nem null megszorítást, egyediség megoszrítást, hossz korlátot, oszlop nevét stb. Date típusú property-k fölé kötelező megadni, hogy miként legyen annotációval, ahol a TIME időt jelent dátum rész nélkül, DATE dátumot jelent időrész nélkül, és a TIMESTAMP dátumot és időt egyszerre.
43
Példaprogram elkészítése NetBeans fejlesztői környezetben.
Az entitás osztályok definícióira teljesülnie kell, annotációval vannak ellátva. Ezen kívül rendelkezniük kell paraméter nélküli konstruktorral, és id-val. Az id általában egy szintetikus azonosító, nem rendelkezik semmilyen értelmes tartalommal. Ez képezi a generált táblákban az elsődleges kulcsot, és ezen id alapján tudja a Hibernate nyomon követni az egyes entitásokat.Az Id létrehozásához, csak definiálni kell egy Long típusú property-t, és el kell látni a getter annotációval. Az utóbbi jelöli azt, hogy új entitás tárolásakor (save) a hibernate-ra bízzuk az id értékének legenerálását és beállítását. A generált id értékét nem szabad megváltoztatni, ezért a láthatóságát érdemes leszűkíteni csomag szintűre. Az id property-t a többi property-előtt szokás definiálni.
44
Példaprogram elkészítése NetBeans fejlesztői környezetben.
Entitások tárolása Szeretnénk létrehozni pár Ismeros objektumot és perzisztensen letárolni őket az adatbázisban. A Main osztályban van erre példa. A bekonfigurált, adatbázishoz csatlakozott Hibernate rendszert a SessionFactory képviseli. Ebből alkalmazásonként egy példányt szokás készíteni, amit például egy statikus mezőben érdemes eltárolni.
45
Példaprogram elkészítése NetBeans fejlesztői környezetben.
static final SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); A session factory-t arra használjuk, hogy a Hibernate oldali munkaegységet képviselő session objektumokat létrehozzuk. Session sess = sessionFactory.openSession(); A session-okat létrehozás után close() metódussal le kell zárni. Ha létrehoztunk egy Ismeros objektumot akkor azt a Session.save() metódussal tudjuk az adatbázisba lementeni. Ekkor kap az entitásunk id értéket is.
46
Példaprogram elkészítése NetBeans fejlesztői környezetben.
A példán kivétel, és tranzakció kezelés is szerepel. Érdemes ezt a mintát követni, csak a kommentekkel jelölt részt kell cserélni, a többi maradhat. Az adatbázist a munka kezdetén ne felejtsük elindítani. Ha sikeresen lefutott a példa, akkor NetBeans-ban, az adatbázis kapcsolatot frissítve és kibontva látnunk kell a létrejött Ismeros táblát és a 4 sort. A mellette lévő hibernate_unique_key tábla az id generáláshoz jött létre. A hibernate.cfg.xml-ben a show_sql true ra állításával látni lehet az elküldött insert utasításokat. (A paraméterezett sql utasítások miatt a konkrét adatok helyett csak kérdőjelekek lesznek.)
47
Példaprogram elkészítése NetBeans fejlesztői környezetben.
Entitások lekérdezése Ha az előző pontban feltöltött entitásokat leszeretnénk kérdezni akkor arra két Hibernate-os eszköz is rendelkezésre áll. Az egyik a HQL (Hibernate Query Languege) nyelvű vagy a Criteria alapú lekérdezés. A HQL lekérdezéseket sztringekkel adjuk meg. Ez egy sql-hez hasonló, de objektum orientált lekérdező nyelv. Benne az entitásokon kell lekérdezéseket definiálni, nem pedig a táblákon. Például leszeretném kérdezni az összes Ismeros típusú objektumot, és rendezni az Ismeros.szuletes property alapján. A lekérdezés alakja a következő: Query q = sess.createQuery("from Ismeros order by szuletes"); List ismerosok = q.list(); kiirIsmerosok(ismerosok);
48
Példaprogram elkészítése NetBeans fejlesztői környezetben.
A Query.list() metódus hajtja végre a lekérdezést, és tér vissza az Ismeros objektumok rendezett listájával. Használat előtt még az egyes elemeket kasztolni kell Object-ről Ismeros-re. A Criteria lekérdezéseket különböző objektumok kompozíciójával adjuk meg. Criteria q = sess.createCriteria(Ismeros.class).addOrder(Order.asc("szuletes")); List ismerosok = q.list(); kiirIsmerosok(ismerosok); Az eredmény ugyanaz.
49
Vége
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.