Od pradávných dob, odkdy se Java nevolá Oak (Dub) ale Java, má jedno nesmazatelné poselství: 'běžet na každém železe'. Toto poselství bylo několikrát rozšířeno v různých oblastech. Nabízím vám stručný úvod, jak to platí v databázových java aplikacích.
Při samotném vývoji Javy, v polovině 90. let, přišli její vývojáři s revoluční myšlenkou: 'učiňme příkazy, které obsluhují databázi jednotné, přirpavme rozhraní, která si každý výrobce databází bude implementovat po svém'. JDBC (Java Database Connectivity) přestavuje jednotné API pro práci s databází. Toto jednotné rozhraní umožnovalo, aby se programátoři soustředili na samotné programování, nemuseli řešit kompatibilitu příkazů na různých typech databází.
Pamatujete si, jak programy přistupovaly k databázovým zdrojům koncem 90. let? Asi stárnu, ale já si to pamatuji. Např. populární Delphi - co typ databáze, to jiný zdroj, to jiné příkazy.
Tento javácký tradiční přístup do databází vyžadoval připojení na databázový zdroj a položení klasického SQL příkazu. Pokud programátor chtěl udělat aplikaci skutečně 'blbovzdrone', potřeboval poošetřovat různé kritické případy, jako například. nedostupnost databázového zdroje nebo selhání databázového spojení. Snad nejhorší možný případ, co mohl vziknout je ten, že programátor v jevu sestavil příkaz do databáze, kterým vytahoval data a neuzavíral ResultSet. To mohlo shodit i ostatní programy na aplikačním serveru, které vůbec nemusely být naprogramovány v jevu.
Velká nevýhoda tohoto přístupu je v tom, že pokládané SQL příkazy jsou různé pro různé typy databází. Ano, daly by se využít standardizovaných dotazů podle ANSI specifikace, jen pak bychom nevyužili předností konkrétní implementace databázového stroje.
Další nevýhoda je v tom, že není přesně určen proces, který mapuje logiku aplikace na příkazy SQL. Toto mapování vzniká většinou intuitivně v hlavě programátora, bez konceptu, což je jednak zdrojem chyb, ba co víc, takový koncept zabraňuje snadnému rozšiřování standalone/web aplikace. Tato intutivní mapování objektů na databázi bývají pevně svázána, což při správě aplikace může vyvolat značné problémy.
Objektově relační mapování (ORM) přesně určuje, jakým způsobem budeme mapovat entity z databáze na objekty. V duchu ORM bychom měli vytvářet jednoduché třídy POJO (Plain Old Java Object). Instance těchto POJO tříd budou vytvářet jednotlivé řádky tabulek (např. is joinovaných).
Java Persistence API (JPA) představuje specifikaci tohoto zprocesovaného objektově-relačního mapování. JPA můžete chápat jako totální standard nezávislosti na RDBMS (Relational Database Management System). MySQL, MariaDB, Oracle, PostgreeDB, atd. Přesně tak, kromě samotné specifikace JPA představuje univerzálnost napsaných programů od verze databáze.
JPA to myslí vážně. Zachází až tak daleko, že má k dispozici vlastní jazyk pro psaní databázových tříd JPQL (Java Persistence Query Language). V ideálním případě nebudete JPQL vůbec potřebovat. Vystačíte si s POJO třídami, které budete vkládat do (resp. vybírat z) entitního manažera. Entitní manžér se už o vše postará automaticky – položí SQL příkaz v konkrétním RDBMS dialektu.
Hibernate objektově-relační framework, který umožňuje vysoce-výkonné objektově-relační mapování v aplikacích, které jsou psány v Javě. Dá se říci, že Hibernate je nástavba JPA (Java Persistence API), kterou vyvíjí RedHat.
Tento framework je licencován pod LGPL, tedy lze volně stáhnout a integrovat do java aplikací. V podstatě si stačí nakopírovat pár řádků do maven konfiguráku a máte to rozchozené.
Pointa Hibernatu je takto: Vytvoříte si POJO objekty, které kopírují nastavení (nyní nebo budoucí!) databáze. Tyto objekty pak naanotujete podle specifikace tak, aby Hibernate tušil co je tabulka a co atribut. Následně si vytvoříte pořad hibernatu, do kterého vkládáte resp. ze které vybíráte takové objetky. O samotné sestroje příkazů SQL se postará hibernate! A co víc, pokud nemáte vytvořenou databázi, můžete si ji nechat vytvořit Hiberantem podle mapování, které jste zadali! Existuje také opačný proces, při kterém vám ze stávajícího databázového schématu vzniknou POJO objekty namapování podle hibernate anotací.
Hibernate můžete použít v Javě Enterpise aplikacích i obyčejných standanlone aplikacích.
Viac informacií preberáme na kurze:
Kurz JAVAEEHIB - Java: Hibernate - praktický úvod do databázového frameworku
Marián Knězek