Moje odkazy
vydáno: 15. 3. 2009 00:09, aktualizováno: 9. 9. 2021 21:13
Objektové programování a relační databáze, to jsou dva dost odlišné světy. K jejich propojení můžeme použít objektově relační mapování (ORM). Ne vždy je to nejlepší cesta a rozhodně to není cesta jediná, ale když už čtete tuhle stránku, předpokládám, že víte, do čeho jdete :-) V dnešním článku se podíváme na jednoduchý příklad použití ORM v podání aplikačního serveru Glassfish a Hibernate (použijeme ho jako poskytovatele JPA).
Abych předešel vašemu zklamání, prozradím už na začátku, co bude výsledkem našeho snažení: zobrazit na webové stránce záznamy z jedné tabulky v databázi.
Možná je to hodně triviální, ale jak známo: „Aby se dosáhlo velkého, je třeba začít s menším.“ Nebudeme teď řešit žádné optimalizace, žádné spojování tabulek, žádné ukládání dat – pouze zobrazení. Než se data dostanou k uživateli, projdou několika vrstvami:
Databáze → Hibernate JPA → EJB → Webová beana → JSP
Do aplikačního serveru potřebujeme dostat podporu Hibernatu – do /opt/glassfish/lib (upravte si podle toho, kde máte GlassFish nainstalovaný) nahrajeme tyto knihovny:
antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar ejb3-persistence.jar hibernate-annotations.jar hibernate-commons-annotations.jar hibernate-entitymanager.jar hibernate3.jar javassist-3.4.GA.jar jta-1.1.jar log4j.jar slf4j-api-1.5.2.jar slf4j-log4j12.jar
Tyto knihovny nemusíte shánět po všech čertech, stačí si stáhnout Hibernate Core a Hibernate EntityManager. A aplikační server restartujeme. Teď máme v našem GlassFishi vedle TopLinku také Hibernate (dva poskytovatele JPA).
V databázi (používám PostgreSQL) pořtebujeme jedinou tabulku, kterou zobrazíme na webu. Tuto tabulku jsem si vypůjčil ze svého programu HříšníciSpameři (info). Zjednodušený skript na vytvoření tabulky najdete v sql/schéma.sql
. Tabulka obsahuje tři sloupečky: id, název, url a jmenuje se cil. Na webové stránce budeme zobrazovat seznam těchto cílů (odkazy).
V aplikačním serveru si vytvoříme datový zdroj a dáme mu JNDI jméno jdbc/HrisniciSpameri
. Toto jméno si samozřejmě můžete změnit dle libosti, ale nezapomeňte pak provést úpravu i v souboru persistence.xml
, který se na něj odkazuje.
Zdrojové kódy tohoto příkaldu najdete v mém mercurialu: HibernateDemo1 (jak to stáhnout?). Aplikace je tvořena několika netbeansovskými projekty:
CilDAORemote
(abychom mohli volat EJB z webové vrstvy) a přepravku Cil
.Po otevření v Netbeans si budete muset nastavit deployování na váš aplikační server a asi trochu upravit knihovny (HibernateDemo1-lib závisí na JavaEE: javaee.jar
– kvůli anotacím).
Z hlediska ORM jsou pro nás zajímavé tyto soubory:
Velice důležitý soubor, nastavujeme zde:
HibernateDemo1-PU
– na tento název se potom odkazujeme v aplikaci: @PersistenceContext()
. Obvykle máme v aplikaci právě jednu persistentní jednotku.org.hibernate.ejb.HibernatePersistence
. Alternativou je TopLink (konkurence).jdbc/HrisniciSpameri
hibernate.dialect
– Hibernate potřebuje vědět, jaký SŘBD je pod ním, aby dokázal správně formulovat SQL dotazy. Vlastnost hibernate.show_sql
můžeme nastavit na true, pokud chceme v logu vidět SQL dotazy, které Hibernate provádí – hodí se pro ladění, jinak ale dáme false, aby nám nezahltil logy. Popis všech parametrů najdeme v dokumentaci.V těchto souborech popisujeme vlastní mapování mezi tabulkami v databázi a třídami v Javě. Toto mapování můžeme popsat i pomocí anotací přímo ve zdrojáku třídy. Zda zvolit to či ono, se dá diskutovat, já jsem si vybral XML. Kromě toho, že XML je prostě bezva :-) se nám nebudou rozlézat závislosti na anotačních třídách do vrstev, ve kterých nás nezajímají, naše přepravkové třídy zůstanou čisté. Rovněž je to pružnější řešení než anotace přímo v kódu.
S daty pracujeme pomocí „entitního manažera“ – použití vidíte ve třídě CilDAOBean
. K psaní dotazů zde nepoužíváme klasické SQL, ale EJB-QL.
Do tabulky v DB si nezapomeňte vložit pár záznamů, aby se mělo co zobrazovat. Pokud se všechno povedlo, uvidíte něco takového: HibernateDemo1 (momentálně není demo dostupné). Ty tři odkazy jsou načtené z databáze – to je vše – jen ukázka.
Témata: [softwarové inženýrství] [Java]
Pokud máte novější Glassfish (verze 3), už nemusíte ručně kopírovat knihovny – jednoduše si Hibernate doinstalujete přes „updaty“ ve webovém rozhraní aplikačního serveru ;-)
Doufám, že čtete i můj seriál na Zdrojáku, kde vyvíjím webovou aplikaci nekurak.net. Používá se v ní Hibernate ORM, EJB a další skvělé věci.
Vyzkoušejte si i novější demo Spring JdbcTemplate. Sice to není ORM ale jen pomůcka usnadňující práci s JDBC, ale přesto (nebo právě proto) se vám může hodit.