Uložené procedúry s režimom dlhodobého spánku

1. Prehľad

Uložené procedúry sú sady zostavených príkazov SQL v databáze. Používajú sa na zapuzdrenie a zdieľanie logiky s inými programami a využívajú výhody funkcií špecifických pre databázu, ako sú tipy na index alebo konkrétne kľúčové slová.

Tento článok ukazuje, ako sa používa Hibernácia zavolať a uložená procedúra v MySQL databáza.

2. Uložené procedúry v MySQL

Predtým, ako diskutujeme o tom, ako zavolať uloženú procedúru z režimu dlhodobého spánku, je potrebné ju vytvoriť.

Pre tento rýchly príklad MySQL vytvoríme uloženú procedúru, aby sme získali všetky záznamy z a foo stôl.

Na vytvorenie uloženej procedúry používame VYTVORIŤ POSTUP vyhlásenie:

DELIMITER // VYTVORENIE POSTUPU GetAllFoos () JAZYK SQL DETERMINISTICKÝ DEFINÉR BEZPEČNOSTI SQL ZAČIATOK VÝBERU * Z foo; KONIEC // ODDELOVAČ;

Pred ZAČAŤ príkaz, môžeme definovať voliteľné príkazy. Podrobnosti o týchto vyhláseniach môžete rozbaliť kliknutím na oficiálny odkaz na dokumentáciu MySQL.

Môžeme použiť VOLAJTE vyhlásenie, aby sme sa ubezpečili, že sa náš postup správa požadovaným spôsobom:

VOLAJTE GetAllFoos ();

Teraz, keď máme spustenú uloženú procedúru, prejdime priamo k tomu, ako ju nazvať z režimu dlhodobého spánku.

3. Zavolajte uloženú procedúru pomocou režimu dlhodobého spánku

Počnúc hibernáciou 3 máme možnosť použiť na dopytovanie databázy nespracovaný príkaz SQL vrátane uložených procedúr.

V tejto časti si ukážeme zdanlivo základný príklad, ktorý ilustruje, ako nazvať GetAllFoos () postup pomocou režimu dlhodobého spánku.

3.1. Konfigurácia

Predtým, ako začneme písať kód, ktorý je možné spustiť, musíme v našom projekte nakonfigurovať režim dlhodobého spánku.

A samozrejme k tomu všetkému - závislosti Maven, konfigurácia MySQL, konfigurácia režimu dlhodobého spánku a SessionFactory inštancia - môžete si pozrieť článok o režime dlhodobého spánku.

3.2. Zavolajte uloženú procedúru pomocou CreateNativeSQL Metóda

Hibernate umožňuje vyjadrovať dotazy v systéme Windows natívny SQL formátovať priamo. Preto môžeme priamo vytvoriť natívny dotaz SQL a použiť znak VOLAJTE vyhlásenie volať getAllFoos () uložená procedúra:

Dotaz na dotaz = session.createSQLQuery ("CALL GetAllFoos ()"). AddEntity (Foo.class); Zoznam allFoos = query.list (); 

Vyššie uvedený dopyt vráti zoznam, v ktorom je každý prvok a Foo object.

Používame addEntity () metóda na získanie objektov entity z natívneho SQL dotaz, inak, a ClassCastException bude vyhodená vždy, keď uložená procedúra vráti nezpracovanú hodnotu.

3.3. Zavolajte uloženú procedúru pomocou @NamedNativeQueries

Ďalším spôsobom, ako zavolať uloženú procedúru, je použitie @NamedNativeQueries anotácia.

@NamedNativeQueries sa používa na zadanie poľa natívnych SQL pomenované dotazy zameraný na jednotku perzistencie:

@NamedNativeQueries ({@NamedNativeQuery (name = "callGetAllFoos", query = "CALL GetAllFoos ()", resultClass = Foo.class)}) @Entity public class Foo implementuje Serializable {// Definícia modelu}

Každý pomenovaný dopyt má zjavne a názov skutočný SQL dotaza resultClassktorý odkazuje na Foo mapovaná entita.

Dotaz na dotaz = session.getNamedQuery ("callGetAllFoos"); Zoznam allFoos = query.list ();

The resultClassatribút hrá rovnakú rolu ako addEntity () metóda v našom predchádzajúcom príklade.

Oba tieto prístupy sa dajú zameniť, pretože medzi nimi nie sú žiadne skutočné rozdiely, pokiaľ ide o výkon alebo produktivitu.

3.4. Zavolajte uloženú procedúru pomocou @NamedStoredProcedureQuery

Ak používate SPZ 2.1 a Hibernácia implementácia EntityManagerFactorya EntityManager.

The @NamedStoredProcedureQuery anotáciu možno použiť na vyhlásenie uloženej procedúry:

@NamedStoredProcedureQuery (name = "GetAllFoos", procedureName = "GetAllFoos", resultClasses = {Foo.class}) @Entity verejná trieda Foo implementuje Serializable {// definícia modelu} 

Aby sme zavolali náš pomenovaný dotaz uloženej procedúry, musíme mať inštanciu EntityManager, a potom zavolajte createNamedStoredProcedureQuery () metóda na vytvorenie postupu:

StoredProcedureQuery spQuery = entityManager.createNamedStoredProcedureQuery ("getAllFoos"); 

Môžeme priamo získať zoznam Foosubjekty volaním na vykonať () metóda na StoredProcedureQueryobjekt.

4. Uložené procedúry s parametrami

Takmer všetky naše uložené procedúry budú vyžadovať parametre. V tejto časti si ukážeme, ako zavolať uloženú procedúru s parametrami z Hibernácia.

Vytvorme a getFoosByName () uložená procedúra v MySQL.

Tento postup vráti zoznam Foo objekty, kde sa atribút názvu zhoduje s fooName parameter:

DELIMITER // VYTVORIŤ POSTUP GetFoosByName (IN fooName VARCHAR (255)) JAZYK SQL DETERMINISTICKÝ DEFINÉR BEZPEČNOSTI SQL ZAČIATOK VÝBERU * FROM foo WHERE name = fooName; KONIEC // ODDELOVAČ;

Zavolať na GetFoosByName ()postup použijeme pomenované parametre:

Dotaz query = session.createSQLQuery ("CALL GetFoosByName (: fooName)") .addEntity (Foo.class) .setParameter ("fooName", "New Foo");

Podobne aj pomenovaný parameter : fooName možno použiť s @NamedNativeQuery anotácia:

@NamedNativeQuery (name = "callGetFoosByName", query = "VOLAŤ GetFoosByName (: fooName)", resultClass = Foo.class)

Pomenovaný dotaz by sa volal takto:

Dotaz na dotaz = session.getNamedQuery ("callGetFoosByName") .setParameter ("fooName", "New Foo");

Pri použití @NamedStoredProcedureQuery anotáciu, môžeme parametre špecifikovať pomocou @StoredProcedureParameter anotácia:

@NamedStoredProcedureQuery (name = "GetFoosByName", procedureName = "GetFoosByName", resultClasses = {Foo.class}, parameters = {@StoredProcedureParameter (name = "fooName", type = String.class, mode = ParameterMode.IN)}) 

Môžeme využiť registerStoredProcedureParameter () metóda zavolať našu uloženú procedúru s fooName parameter:

StoredProcedureQuery spQuery = entityManager. createNamedStoredProcedureQuery ("GetFoosByName") .regStoredProcedureParameter ("New Foo", String.class, ParameterMode.IN);

5. Záver

Tento článok demonštroval ako používať Hibernate na volanie uloženej procedúry v databáze MySQL pomocou rôznych prístupov.

Za zmienku stojí to nie všetky RDBMS podporujú uložené procedúry.

Príklady uvedené v tomto článku si môžete pozrieť v prepojenom projekte GitHub.


$config[zx-auto] not found$config[zx-overlay] not found