Gyors útmutató a MyBatis-hoz

1. Bemutatkozás

A MyBatis egy nyílt forráskódú állandósági keretrendszer, amely leegyszerűsíti az adatbázis-hozzáférés megvalósítását a Java alkalmazásokban. Támogatja az egyéni SQL-t, a tárolt eljárásokat és a különböző típusú leképezési relációkat.

Egyszerűen fogalmazva, ez a JDBC és a Hibernate alternatívája.

2. Maven-függőségek

A MyBatis használatához hozzá kell adnunk a függőséget pom.xml:

 org.mybatis mybatis 3.4.4 

A függőség legújabb verziója itt található.

3. Java API-k

3.1. SQLSessionFactory

SQLSessionFactory minden MyBatis alkalmazás alapvető osztálya. Ezt az osztályt a használatával példányosítják SQLSessionFactoryBuilder 's építész() metódus, amely egy konfigurációs XML fájlt tölt be:

String erőforrás = "mybatis-config.xml"; InputStream inputStream Resources.getResourceAsStream (erőforrás); SQLSessionFactory sqlSessionFactory = új SqlSessionFactoryBuilder (). Build (inputStream);

A Java konfigurációs fájl olyan beállításokat tartalmaz, mint az adatforrás meghatározása, a tranzakciókezelő részletei, valamint az entitások közötti kapcsolatokat meghatározó leképezők listája, ezeket együtt használják a SQLSessionFactory példa:

public static SqlSessionFactory buildqlSessionFactory () {DataSource dataSource = new PooledDataSource (DRIVER, URL, USERNAME, PASSWORD); Környezeti környezet = új környezet ("Fejlesztés", új JdbcTransactionFactory (), dataSource); Konfigurációs konfiguráció = új Konfiguráció (környezet); configuration.addMapper (PersonMapper.class); // ... SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder (); return builder.build (konfiguráció); }

3.2. SQLSession

SQLSession módszereket tartalmaz az adatbázis-műveletek végrehajtására, a leképezők megszerzésére és a tranzakciók kezelésére. Innen lehet példányosítani SQLSessionFactory osztály. Az ebbe az osztályba tartozó példányok nem biztonságosak a menetben.

Az adatbázis művelet végrehajtása után a munkamenetet le kell zárni. Mivel SqlSession végrehajtja a Automatikusan zárható felületen használhatjuk a erőforrásokkal próbálkozzon Blokk:

próbáld (SqlSession session = sqlSessionFactory.openSession ()) {// munka

4. Térképezők

A leképezők Java interfészek, amelyek a módszereket a megfelelő SQL utasításokhoz társítják. A MyBatis annotációkat kínál az adatbázis-műveletek meghatározásához:

nyilvános felület PersonMapper {@Insert ("Beszúrás a személy (név) értékekbe (# {név})") nyilvános Egész mentés (Személy); // ... @Select ("Select personId, name from Person where personId = # {personId}") @Results (value = {@Result (tulajdonság = "personId", oszlop = "personId"), @Result (tulajdonság = "név", oszlop = "név"), @Eredmény (tulajdonság = "címek", javaType = Lista.osztály, oszlop = "személyId", [e-mail védett] (select = "getAddresses"))}}) public Person getPersonById (Integer personId); // ...}

5. MyBatis kommentárok

Nézzük meg a MyBatis által nyújtott főbb kommentárokat:

  • @Beillesztés, @Select, @Update, @Deleteezek a kommentárok olyan SQL utasításokat jelentenek, amelyeket kommentált módszerek meghívásával kell végrehajtani:
    @Insert ("Beszúrás személybe (név) értékek (# {név})") nyilvános Egész mentés (Személy személy); @Update ("Frissítse a személykészlet nevét = # {név} ahol personId = # {személyId}") public void updatePerson (Személy személy); @Delete ("Törlés olyan személyből, ahol personId = # {personId}") public void deletePersonById (Integer personId); @Select ("SELECT person.personId, person.name FROM person WHERE person.personId = # {personId}") személy getPerson (Integer personId);
  • @Eredmények - az eredmények leképezéseinek listája, amely tartalmazza az adatbázis oszlopainak Java osztályattribútumokhoz való hozzárendelésének részleteit:
    @Select ("Select personId, név személyből, ahol personId = # {personId}") @Eredmények (érték = {@Result (tulajdonság = "personId", oszlop = "personId") // ...}) public Person getPersonById (Integer personId);
  • @Eredmény - egyetlen példányát képviseli Eredmény a keresett eredmények listájából @Eredmények. Tartalmazza a részleteket, például az adatbázis oszlopból a Java bab tulajdonságba történő leképezést, a tulajdonság Java típusát, valamint a társítást más Java objektumokkal:
    @Results (érték = {@Result (tulajdonság = "personId", oszlop = "personId"), @Result (tulajdonság = "név", oszlop = "név"), @Result (tulajdonság = "címek", javaType = lista .osztály) // ...}) public person getPersonById (Integer personId);
  • @Sokmegadja az egyik objektum hozzárendelését a többi objektum gyűjteményéhez:
    @Eredmények (érték = {@Result (tulajdonság = "címek", javaType = Lista.osztály, oszlop = "personId", [e-mail védett] (select = "getAddresses"))}

    Itt getAddresses az a módszer, amely visszaadja a Cím a Címtábla lekérdezésével.

    @Select ("select addressId, streetAddress, personId from address ahol personId = # {personId}") public address getAddresses (Integer personId);

    Hasonló @Sok annotáció, van @Egy annotáció, amely meghatározza az objektumok közötti egy-egy leképezési kapcsolatot.

  • @MapKeyezt használják a rekordok listájának konvertálására Térkép rekordokkal a kulccsal, amelyet az érték tulajdonság:
    @Select ("select * from Person") @MapKey ("personId") Térkép getAllPerson ();
  • @Opciókez az annotáció meghatározza a kapcsolók és konfigurációk széles körét, amelyeket meg kell határozni, hogy más utasításokon történő definiálás helyett @Opciók meghatározni őket:
    @Insert ("Beszúrás a címbe (streetAddress, personId) értékekbe (# {streetAddress}, # {personId})") @Options (useGeneratedKeys = hamis, flushCache = true) public Integer saveAddress (cím címe);

6. Dinamikus SQL

A dinamikus SQL egy nagyon hatékony szolgáltatás, amelyet a MyBatis biztosít. Ezzel pontosan össze tudjuk építeni összetett SQL-jünket.

A hagyományos JDBC-kóddal SQL-utasításokat kell írnunk, összefűznünk a köztük lévő szóközök pontosságával, és a vesszőket a megfelelő helyre téve. Ez nagy hibára hajlamos és nagyon nehéz hibakeresni, nagy SQL utasítások esetén.

Fedezzük fel, hogyan használhatjuk az alkalmazásunkban a dinamikus SQL-t:

@SelectProvider (type = MyBatisUtil.class, method = "getPersonByName") nyilvános személy getPersonByName (karakterlánc neve);

Itt megadtunk egy osztályt és egy metódus nevet, amely valóban elkészíti és létrehozza a végső SQL-t:

public class MyBatisUtil {// ... public String getPersonByName (String name) {return new SQL () {{SELECT ("*"); FROM ("személy"); WHERE ("név, mint # {név} || '%'"); }}. toString (); }}

A dinamikus SQL az összes SQL-konstrukciót osztályként biztosítja, pl. SELECT, HOL stb. Ezzel dinamikusan megváltoztathatjuk a generációt HOL kikötés.

7. Tárolt eljárás támogatása

A tárolt eljárást a @Select annotáció. Itt át kell adnunk a tárolt eljárás nevét, a paraméterlistát, és explicitet kell használnunk Hívás az eljáráshoz:

@Select (value = "{CALL getPersonByProc (# {personId, mode = IN, jdbcType = INTEGER})}") @Options (statementType = StatementType.CALLABLE) public Person getPersonByProc (Integer personId);

8. Következtetés

Ebben a gyors oktatóanyagban láthattuk a MyBatis által biztosított különféle szolgáltatásokat, és azt, hogy miként könnyíti meg az adatbázis-alkalmazások fejlesztését. Láttunk különféle annotációkat is, amelyeket a könyvtár biztosított.

A cikk teljes kódja elérhető a GitHub oldalon.


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