Co je to HQL?
HQL je zkratka pro jazyk hibernačního dotazu. Hibernate je platforma pro připojení tradičních databází k objektově orientovanému jazyku (konkrétně JAVA). Jde o dotazovací jazyk v režimu hibernace, který se podobá jazyku SQL v tradičním RDBMS s výjimkou skutečnosti, že místo tabulek používáme entitu v HQL. Je zapsán v kódu JAVA a různé funkce z knihovny JAVA slouží k převodu HQL na SQL. Lze ji nazvat jako objektově orientovaný jazyk s vyraženými příkazy SQL. Jedná se o flexibilní a uživatelsky přívětivý jazyk s vlastní syntaxí a gramatikou pro načítání, ukládání a aktualizaci informací z databáze. Snižuje nesoulad impedance mezi JAVA a RDBMS.
Proč potřebujeme HQL?
Protože význam JAVA jako jazyka pro platformy, jako je internet, roste, je pro nás důležitější propojit naši aplikaci založenou na JAVA s backend pomocí hibernace. Hibernate místo toho používá jazyk HQL k navázání spojení mezi databází a front-endem.
Potřebujeme HQL, když chceme vybrat některá konkrétní pole a sloupce podle našich požadavků. Metody přijaté dříve nebyly dostatečně účinné, aby se dostaly na tuto úroveň, například načtení sady výsledků nebo sady dat z databáze jako celého záznamu majícího počet řádků a sloupců. Tento přístup nedává flexibilitu pro zúžení vyhledávání a činí aplikaci těžkou a pomalou. Tento přístup používají JDBC Connectors, asp.net a mnoho dalších jazyků. Použití HQL snižuje tuto časovou mezeru a poskytuje konkrétní výsledky. Proto je důležitější použít v prostředí v reálném čase, kde je JAVA zapojena do front-endu.
Jak HQL funguje?
HQL je formát souboru XML, který propojuje java od front-endu k databázi na back-endu. SQL dotazy, které přímo spouštíme v databázi pomocí SQL dotazů, lze zapsat také do hql. HQL má svou vlastní syntaxi, do které můžeme napsat dotaz a poté se tento dotaz převede na příkazy SQL, kterým databáze může rozumět. Toto je psáno v jazyce Java, aby se snížil nesoulad impedance.
HQL je jazyk nerozlišující velká a malá písmena, kromě názvu tříd a entit. Například: org.hibernate.eg.test se nerovná org.hibernate.eg.Test, protože „test“ a „test“ jsou dvě různé entity v HQL.
Poznámka: SQL můžeme použít v HQL dotazech přímo pomocí nativního kódu.
Výhody HQL
Existuje několik výhod HQL jako jazyka:
- Kodér nemá povinnost se učit jazyk SQL.
- HQL je objektově orientovaný a jeho výkon je dobrý, když propojíme naši front-end aplikaci s backendem.
- HQL má vyrovnávací paměť a tím zvyšuje rychlost.
- HQL podporuje populární vlastnosti konceptů OOP, jako je polymorfismus, dědičnost a asociace.
Syntaxe spolu s příklady dotazů HQL
Některé jednoduché dotazy v režimu spánku vypadají takto:
Klauzula FROM:
From eg.Test or From Test.
Toto prohlášení vrátí všechny instance třídy. V tomto případě je to Test. Můžeme také vytvořit alias pro např .: Z testu jako test. Tady „test“ je alias Testu. Tento alias pak můžete použít později místo třídy.
Příklad č. 1
String hqlquery = "FROM Test";
Query q = session.createQuery(hqlquery);
List display = q.list();
AS Clause: From eg.Test AS T or From Test AS T.
Tento příkaz se používá, když chceme vytvořit aliasy pro hlavní třídy HQL. Toto je užitečná technika v případě, že máme dlouhé dotazy. Můžeme jednoduše přiřadit dotaz alias a pak použít tento alias pro další zpracování dat. Aliasing lze provést i bez klíčového slova AS. Například: Z testu T.
Příklad č. 2
String hqlquery = "FROM Test AS T";
Query q = session.createQuery(hqlquery);
List display = q.list();
WHERE Clause: From eg.Test T WHERE T.code=102 or From Test T WHERE T.code=102.
Toto ustanovení se používá, když prohledáváme konkrétní data v databázové tabulce. Pokud tedy hledáme konkrétní záznam na základě testovacího kódu, který máme, pak se v dotazu použije tato klauzule. Pomůže to při zúžení kritéria vyhledávání. Dáme-li primární klíč f v tabulce, kde klauzule, pak bychom měli vidět výrazné zlepšení rychlosti vyhledávání.
Příklad č. 3
String hqlquery = "FROM Test T WHERE T.code = 102";
Query q = session.createQuery(hqlquery);
List display = q.list();
SELECT Clause:
From eg. SELECT T.number FROM Test T.
Toto ustanovení se používá, pokud chceme vybrat konkrétní sloupec z databázové tabulky. To je jeden ze způsobů, jak zúžit vyhledávací kritérium. Jakýkoli název pole, který uvedeme v klauzuli select, bude vybrán. Je užitečné načíst malé množství dat, pokud k nim máme specifické informace.
Příklad č. 4
String hql = "SELECT E.firstName FROM Employee E";
Query query = session.createQuery(hql);
List results = query.list();
DELETE Clause:
String hqlexample = "DELETE FROM Test " +
"WHERE code = : test_code";
Tuto klauzuli v dotazu lze použít k odstranění jednoho nebo více objektů z připojené databázové tabulky. Tímto způsobem lze vymazat jak „přechodné“, tak „trvalé“ objekty. Toto je jednoduchý dotaz pro odstranění libovolného počtu polí nebo tabulek z databáze. To by mělo být používáno opatrně.
Příklad č. 5
String hqlquery = "DELETE FROM Test " +
"WHERE code = : test_code";
Query q = session.createQuery(hqlquery);
q.setParameter("test_code", 102);
int display = q.executeUpdate();
System.out.println("Hence the number of rows modified are: " + display);
Závěr
HQL je tedy elegantní objektově orientovaný jazyk, který překlenuje propast mezi objektově orientovaným JAVA a systémem správy databází. S nejvyšším podílem na trhu se jazyk hibernace dotazu stává populárním jazykem, na kterém lze pracovat.
Doporučené články
Toto je průvodce HQL. Zde diskutujeme, proč potřebujeme HQL s výhodami, prací a syntaxí spolu s příklady dotazů. Další informace naleznete také v následujících článcích -
- Hibernace Framework
- Hibernace
- Hibernate Interview Otázky
- Co je to Java Hibernate?