Stručný sprievodca MyBatis

1. Úvod

MyBatis je otvorený rámec pre perzistenciu, ktorý zjednodušuje implementáciu prístupu k databáze v aplikáciách Java. Poskytuje podporu pre vlastné SQL, uložené procedúry a rôzne typy mapovacích vzťahov.

Jednoducho povedané, je to alternatíva k JDBC a Hibernate.

2. Maven závislosti

Aby sme mohli používať MyBatis, musíme k nim pridať závislosť pom.xml:

 org.mybatis mybatis 3.4.4 

Najnovšiu verziu závislosti nájdete tu.

3. Java API

3.1. SQLSessionFactory

SQLSessionFactory je základnou triedou pre každú aplikáciu MyBatis. Táto trieda je inštancovaná pomocou SQLSessionFactoryBuilder 's staviteľ () metóda, ktorá načíta konfiguračný súbor XML:

Reťazec resource = "mybatis-config.xml"; InputStream inputStream Resources.getResourceAsStream (zdroj); SQLSessionFactory sqlSessionFactory = nový SqlSessionFactoryBuilder (). Build (inputStream);

Konfiguračný súbor Java obsahuje nastavenia, ako je definícia zdroja údajov, podrobnosti správcu transakcií, a zoznam mapovačov, ktoré definujú vzťahy medzi entitami, tieto sa spoločne používajú na zostavenie SQLSessionFactory inštancia:

public static SqlSessionFactory buildqlSessionFactory () {DataSource dataSource = new PooledDataSource (DRIVER, URL, USERNAME, PASSWORD); Environment environment = new Environment ("Development", new JdbcTransactionFactory (), dataSource); Konfigurácia konfigurácie = nová Konfigurácia (prostredie); configuration.addMapper (PersonMapper.class); // ... SqlSessionFactoryBuilder builder = nový SqlSessionFactoryBuilder (); návrat builder.build (konfigurácia); }

3.2. SQLSession

SQLSession obsahuje metódy na vykonávanie databázových operácií, získavanie mapovačov a správu transakcií. Môže byť inštancovaný z SQLSessionFactory trieda. Inštancie tejto triedy nie sú bezpečné pre vlákna.

Po vykonaní operácie s databázou by sa relácia mala ukončiť. Odkedy SqlSession realizuje Automatické uzatváranie môžeme použiť vyskúšajte zdroje blok:

try (SqlSession session = sqlSessionFactory.openSession ()) {// do práce}

4. Mapovači

Mapovače sú rozhrania Java, ktoré mapujú metódy na príslušné príkazy SQL. MyBatis poskytuje anotácie na definovanie databázových operácií:

verejné rozhranie PersonMapper {@Insert ("Vložiť do osoby (meno) hodnoty (# {meno})") verejné celé číslo uložiť (Osoba osoba); // ... @Select ("Vyberte personId, meno od osoby, kde personId = # {personId}") @Results (hodnota = {@Result (property = "personId", stĺpec = "personId"), @Result (vlastnosť = "name", column = "name"), @Result (property = "addresses", javaType = List.class, column = "personId", [email protected] (select = "getAddresses")})) verejná osoba getPersonById (Celé číslo osoby); // ...}

5. Anotácie MyBatis

Pozrime sa na niektoré z hlavných anotácií, ktoré poskytuje MyBatis:

  • @Insert, @Select, @Update, @Deletetieto anotácie predstavujú príkazy SQL, ktoré sa majú vykonať volaním anotovaných metód:
    @Insert ("Vložiť do osoby (meno) hodnoty (# {meno})") verejné celé číslo uložiť (Osoba osoba); @Update ("Update Person set set name = # {name} where personId = # {personId}") public void updatePerson (Osoba osoba); @Delete ("Odstrániť od osoby, kde personId = # {personId}") public void deletePersonById (Celé číslo osobyId); @Select ("SELECT person.personId, person.name FROM person WHERE person.personId = # {personId}") Osoba getPerson (celé číslo personId);
  • @Výsledky - je to zoznam mapovaní výsledkov, ktoré obsahujú podrobnosti o tom, ako sú stĺpce databázy mapované na atribúty triedy Java:
    @Select ("Vyberte personId, meno od osoby, kde personId = # {personId}") @Results (value = {@Result (property = "personId", column = "personId") // ...}) verejná osoba getPersonById (Celé číslo osoby);
  • @Výsledok - predstavuje jednu inštanciu súboru Výsledok zo zoznamu výsledkov získaných z @Výsledky. Zahŕňa podrobnosti ako mapovanie zo stĺpca databázy do vlastnosti Java bean, typ Java vlastnosti a tiež asociácia s inými objektmi Java:
    @Results (value = {@Result (property = "personId", column = "personId"), @Result (property = "name", column = "name"), @Result (property = "addresses", javaType = zoznam .class) // ...}) public Person getPersonById (Integer personId);
  • @Mnohéurčuje mapovanie jedného objektu do kolekcie ďalších objektov:
    @Results (value = {@Result (property = "addresses", javaType = List.class, column = "personId", [email protected] (select = "getAddresses"))})

    Tu getAddresses je metóda, ktorá vracia zbierku Adresa dotazom na tabuľku adries.

    @Select ("select addressId, streetAddress, personId z adresy, kde personId = # {personId}") verejná adresa getAddresses (celé číslo personId);

    Podobný @Mnohé anotáciu, máme @ Jeden anotácia, ktorá špecifikuje vzájomný mapovací vzťah medzi objektmi.

  • @MapKeytoto sa používa na prevod zoznamu záznamov na Mapa záznamov s kľúčom podľa definície v hodnotu atribút:
    @Select ("vybrať * od osoby") @MapKey ("personId") Mapa getAllPerson ();
  • @Možnostitáto anotácia špecifikuje širokú škálu prepínačov a konfigurácie, ktoré je potrebné definovať, takže namiesto ich definovania v iných príkazoch môžeme @Možnosti definovať ich:
    @Insert ("Hodnoty vložiť do adresy (streetAddress, personId) (# {streetAddress}, # {personId})") @Options (useGeneratedKeys = false, flushCache = true) public Integer saveAddress (adresa adresy);

6. Dynamické SQL

Dynamic SQL je veľmi výkonná funkcia, ktorú poskytuje MyBatis. Vďaka tomu môžeme štruktúrovať náš komplexný SQL s presnosťou.

Pri tradičnom kóde JDBC musíme písať príkazy SQL, spájať ich s presnosťou medzier medzi nimi a umiestňovať čiarky na správne miesta. Toto je veľmi náchylné na chyby a je veľmi ťažké ho odladiť v prípade veľkých príkazov SQL.

Poďme preskúmať, ako môžeme v našej aplikácii použiť dynamický SQL:

@SelectProvider (type = MyBatisUtil.class, method = "getPersonByName") verejná osoba getPersonByName (názov reťazca);

Tu sme zadali triedu a názov metódy, ktorá skutočne vytvára a generuje výsledný SQL:

public class MyBatisUtil {// ... public String getPersonByName (String name) {return new SQL () {{SELECT ("*"); FROM („osoba“); KDE ("meno ako # {name} || '%'"); }}.natiahnuť(); }}

Dynamic SQL poskytuje všetky konštrukcie SQL ako triedu, napr. VYBERTE, KDE Vďaka tomu môžeme dynamicky meniť generáciu KDE doložka.

7. Podpora uložených procedúr

Uloženú procedúru môžeme vykonať aj pomocou @Vybrať anotácia. Tu musíme odovzdať názov uloženej procedúry, zoznam parametrov a použiť explicitný údaj Volaj k tomuto postupu:

@Select (value = "{CALL getPersonByProc (# {personId, mode = IN, jdbcType = INTEGER})}") @Options (statementType = StatementType.CALLABLE) verejná osoba getPersonByProc (celé číslo personId);

8. Záver

V tomto rýchlom návode sme videli rôzne funkcie poskytované serverom MyBatis a to, ako uľahčujú vývoj databázových aplikácií. Videli sme tiež rôzne anotácie poskytnuté knižnicou.

Celý kód tohto článku je k dispozícii na GitHub.


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