ORM letem světem
Do základní architektury správné webové aplikace patří persistence vrstva. Záměrně používám
anglického výrazu neboť označení datová vrstva mi přijde trochu zavádějící v souvislosti
s třívrstvým modelem.
Proč persistence vrstva a ORM
Základní vlastností persitence vrstvy je odstínit vyšší vrstvy, především business vrstvu,
od konkrétního datového zdroje. To má půvab v jednoduché změně backendu (datového zdroje)
v pozadí, bez nutnosti změny v aplikačním kódu.
Způsobů jak výše uvedeného dosáhnout je několik, ale troufám si tvrdit, že ten nejpoužívanější
je mapování objektu na relace tzv. ORM. Mapování
je způsob jakým vyjadřujeme relace pomocí objektů.
Představme si případ kdy máme v relační databázi tabulku pro zaměstnance a tabulku pro jejich
telefonní čísla. Při mapování nám v takovém případě vzniknou dva objekty, jeden odpovídá tabulce
zaměstnanec (sloupečky tabulky odpovídají rozhraní objektu) a druhý tabulce telefonních čísel.
Zároveň při mapování vyjádříme relaci 1:n mezi zaměstnancem a telefonním číslem, mezi objekty
je tento vztah realizován pomocí vnořených kolekcí.
V aplikační logice pak nepíšeme SQL dotazy, ale jejich obdoby pro daný OR framework
např. Hibernate má jazyk HQL (Hibernate Query Language).
Výsledkem takového dotazu je pak objekt nebo kolekce objektů, v našem fiktivním případě by dotaz
select z from Zamestnanec z where z.prijmeni = ? vrátil objekt nebo kolekci objektů
Zamestnanec.
OR frameworky nabízejí báječné rozhraní pro objekty. Představme si, že máme
formulář pro zadávání nových zaměstnanců, odesláním takového formuláře můžeme
vytvořit v aplikační logice objekt Zamestnanec, který díky namapování
(objektu Zamestanec odpovída tabulka zamestnanec) a provolání specifické metody
frameworku pro ukládání objektu, tohoto zaměstnance uložíme.
Nutnost specifikace persistence vrstvy vedla k vytvoření rozhraní JDO (Java Data Objects),
které unifikuje jednotlivé aspekty, které byly proprietárně řešeny jednotlivými frameworky. Pro další studium
bych doporučoval článek Scotta W. Amblera The Fundamentals of Mapping Objects to Relational Databases
a Richarda Hightowera Object-relation mapping without the container nebo porovnání jednotlivých ORM frameworku.
Související články
Související epizody CZ Podcastu
- #3 · Java 6 SE, Vývoj webových aplikací
Dagi a Filemon o novinkách v Javě 6 a webových frameworcích.
- #1 · Vývojová prostředí v Javě
První díl CZ Podcastu se věnuje vývojovým prostředím pro Javu.