1 / 49

Hibernate

Hibernate. Nem ezzel nem lehet embereket hibernálni ! DE akkor mit lehet? A válasz pedig ezekben a diákban rejlik. Mi a Hibernate?!. Relációs perzisztencia Javához és .NET-hez

fayola
Download Presentation

Hibernate

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 JBossEnterpriseMiddleware System (JEMS) termékek kiemelkedő része is. Mivel a JBossa 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 (JBossEnterpriseMiddleware 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 3.6.5-ö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 JARfileokat amihez a Hibernate-nekszü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-nakszintén benne kell legyen a projectmappában ha használni akarod a JPA API-katvagy 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 hibernatemü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 • UserDefinedType – SQL kiterjesztés • Oszlopként

  11. Öröklődés/Polimorfizmus Hogyan tároljuk le? Polimorfikus lekérdezés?

  12. Azonosítás • Java • Referencia szerint (==) • Érték szerint (Equals()) • SQL • 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 • 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ásaNetBeans-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.

  23. Példaprogram elkészítése NetBeans fejlesztői környezetben. • Adatbázis példány létrehozásaA Services panelben a Databasesfü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, CreateDatabase 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.

  24. Példaprogram elkészítése NetBeans fejlesztői környezetben. • A Hibernate konfigurálásaAz 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 xmlben.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.

  25. Példaprogram elkészítése NetBeans fejlesztői környezetben. • Entitások készítéseEgyszerű 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 egy @Entity annotációval. Ezzel jelezzük, hogy ez egy adatbázisba leképezett osztály. A hibernate.cfg.xml-ben minden egyes @Entity-vel ellátott osztályt regisztrálni kell (mapping tag)

  26. 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. A @Column-al 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 tárolva: @Temporal 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.

  27. Példaprogram elkészítése NetBeans fejlesztői környezetben. • Az entitás osztályok definícióira teljesülnie kell, hogy @Entity 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.AzId létrehozásához, csak definiálni kell egy Long típusú property-t, és el kell látni a getter metódusát @Id és @GeneratedValue 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 idproperty-t a többi property-előtt szokás definiálni.

  28. Példaprogram elkészítése NetBeans fejlesztői környezetben. • Entitások tárolásaSzeretné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.

  29. Példaprogram elkészítése NetBeans fejlesztői környezetben. • staticfinalSessionFactorysessionFactory = newAnnotationConfiguration().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.

  30. 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-bena show_sqltruera á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.)

  31. Példaprogram elkészítése NetBeans fejlesztői környezetben. • Entitások lekérdezéseHa 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.szuletesproperty alapján.  A lekérdezés alakja a következő: • Query q = sess.createQuery("fromIsmerosorderbyszuletes"); List ismerosok = q.list(); kiirIsmerosok(ismerosok);

  32. 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őlIsmeros-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.

  33. Vége

More Related