Hibernate Nem ezzel nem lehet embereket hibernálni! DE akkor mit lehet? A válasz pedig ezekben a diákban rejlik.

Slides:



Advertisements
Hasonló előadás
Tananyag: konzultáció
Advertisements

© Kozsik Tamás Adatbáziskezelés •Relációs adatbáziskezelők •Noha a Java objektum-elvű, egyelőre nem az objektum-elvű adatbáziskezelőket támogatja.
Programozás III STRING-XML.
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
C++ programozási nyelv Gyakorlat hét
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
Számítógépes ismeretek 5. óra
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
1 Informatikai Szakképzési Portál Adatbázis kezelés DCL – Adatvezérlő nyelv.
Adatbázis kezelés. Hierarchikus modell Legrégebbi modell, ma már nem használatos. Az adatokat fákban tároljuk, ahol minden pont a szegmens adatokat, és.
Programozás III KOLLEKCIÓK 2..
5. GYAKORLAT SQL CREATE TABLE, aktualizálás. S QL Structured Query Language A relációs adatbáziskezelés szabványos nyelve Nem algoritmikus, de beépíthető.
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
megismerése, mintaadatbázis létrehozása
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Adatbázis-kezelés.
Bevezetés a Java programozásba
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Programrendszerek Fejlesztése
(MY)SQL MEGJEGYZÉSEK. MYISAM VS. INNODB  A MySQL-ben többféle tárolási motor is használatos: MyISAM, InnoDB  A régebbi verziókban a MyISAM alapértelmezett,
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Fejlett Programozási Technológiák II. Világos Zsolt 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 10. Adatkezelés JPA-Hibernate Dr. Bilicki Vilmos Szegedi.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A Java programozási nyelvSoós Sándor 1/20 Java programozási nyelv 11. rész – Adatbázis-programozás Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Adatbázis-kezelés ACCESS program:
2006. október 2.Markó Tamás, PTE TTK1 Az Oracle SQL 5. Nézettáblák létrehozása, módosítása és törlése.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
Entity framework Krizsán Zoltán
Access alapok Táblák, kapcsolatok, űrlapok.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Delphi programozás 8. ELŐADÁS ADO ActiveX Data Objects.
Nézettáblák létrehozása, módosítása és törlése
XML támogatás adatbázis-kezelő rendszerekben
Objektumorientált tervezés és programozás II. 3. előadás
Adatbázis adminisztrátori ismeretek
Felhasználók és jogosultságok
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
APEX BMF, II. félév.
3. előadás.  Apache szerver tudnivalók  Az index.php .htaccess – web-szerverünk beállításai  Konfigurációs állományok  Adatbázis kapcsolódás beállítása.
Adatbázis kezelés.
Adatbázis-kezelés.
A gyakorlatok munkakörnyezete
XML fejlesztések TSQL fejlesztések Tábla paraméter SQLCLR fejlesztések 8k limit feloldása Több paraméteres UDA-ek Ordered UDF-ek Entity Framework ADO.NET.
ORACLE ORDBMS adminisztrációs feladatok 3. rész dr. Kovács László 2004.
1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai
Adatbázis alapfogalmak
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
WEBSTAR CSOPORT WC S ADATBÁZIS VERZIÓKÖVETÉSE: LIQUIBASE Marics Tamás június 20.
1 Verseny 2000 gyakorlat SQL 2000 Server Portál adatbázis létrehozása.
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
Java web programozás 5..
 Adatbázis:  Valamilyen szempont szerint rendszerezett adathalmaz.  Adatbázis kezelés:  Adatok tárolása  Műveletek végzése az adatbázison; (Adatok.
1 Copyright © 2004, Oracle. All rights reserved. Bevezetés.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Programozás III JPA.
Bevezetés Adatbázisok használata. Mi is az adatbázis? Az adatbázisok ma már az élet számos területén alapvető fontossággal bírnak (Google, Amazon, Flickr,
Alkalmazásfejlesztés gyakorlat
Hibernate / EclipseLink / OpenJPA összehasonlítás
Adatkötés Sablonokkal
Előadás másolata:

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

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.

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

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

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.

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.

A hibernate müködése

Paradigma ütközés/Granularitás

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

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

Azonosítás Java SQL Referencia szerint (==) Érték szerint (Equals()) Elsődleges kulcs Mi legyen az? Név? Független kulcs?

Viszonyok Java M:M SQL 1:M 1:1

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

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

Architektúra

Architektúra

Architektúra

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.

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

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.

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.

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.

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.

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

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.

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.Az  Id 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 id property-t a többi property-előtt szokás definiálni.

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.

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.

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

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

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.

Vége