Kratki vodič za MyBatis

1. Uvod

MyBatis je okvir postojanosti otvorenog koda koji pojednostavljuje implementaciju pristupa bazama podataka u Java aplikacijama. Pruža podršku za prilagođeni SQL, pohranjene procedure i različite vrste odnosa mapiranja.

Jednostavno rečeno, to je alternativa JDBC-u i hibernaciji.

2. Ovisnosti Mavena

Da bismo koristili MyBatis, moramo dodati ovisnost o našem pom.xml:

 org.mybatis mybatis 3.4.4 

Najnoviju verziju ovisnosti možete pronaći ovdje.

3. Java API-ji

3.1. SQLSessionFactory

SQLSessionFactory je osnovna klasa za svaku MyBatis aplikaciju. Ova je klasa instancirana pomoću SQLSessionFactoryBuilder 's graditelj() metoda koja učitava konfiguracijsku XML datoteku:

String resurs = "mybatis-config.xml"; InputStream inputStream Resources.getResourceAsStream (resurs); SQLSessionFactory sqlSessionFactory = novi SqlSessionFactoryBuilder (). Build (inputStream);

Java konfiguracijska datoteka uključuje postavke poput definicije izvora podataka, pojedinosti upravitelja transakcija i popis mapiranja koji definiraju odnose između entiteta, koji se zajedno koriste za izgradnju SQLSessionFactory primjer:

javna statička SqlSessionFactory buildqlSessionFactory () {DataSource dataSource = novi PooledDataSource (DRIVER, URL, USERNAME, PASSWORD); Okruženje okoliša = novo okruženje ("Razvoj", novi JdbcTransactionFactory (), dataSource); Konfiguracija konfiguracije = nova konfiguracija (okruženje); configuration.addMapper (PersonMapper.class); // ... graditelj SqlSessionFactoryBuilder = novi SqlSessionFactoryBuilder (); return builder.build (konfiguracija); }

3.2. SQLSession

SQLSession sadrži metode za obavljanje operacija baze podataka, dobivanje mapa i upravljanje transakcijama. Može se instancirati iz SQLSessionFactory razred. Primjeri ove klase nisu zaštićeni niti.

Nakon izvođenja operacije baze podataka sesiju treba zatvoriti. Od SqlSession provodi AutoCloseable sučelje, možemo koristiti pokušajte s resursima blok:

probajte (SqlSession session = sqlSessionFactory.openSession ()) {// obavite posao}

4. Maperi

Maperi su Java sučelja koja mapiraju metode u odgovarajuće SQL izraze. MyBatis nudi bilješke za definiranje operacija baze podataka:

javno sučelje PersonMapper {@Insert ("Umetanje u vrijednosti osobe (imena) (# {name})") javno spremanje cijelog broja (osoba osobe); // ... @Select ("Select personId, name from Person where personId = # {personId}") @Results (value = {@Result (property = "personId", column = "personId"), @Result (property = "name", column = "name"), @Result (svojstvo = "adrese", javaType = List.class, column = "personId", [email protected] (select = "getAddresses"))}) javna osoba getPersonById (Integer personId); // ...}

5. MyBatis napomene

Pogledajmo neke od glavnih bilješki koje nudi MyBatis:

  • @Insert, @Select, @Update, @Deletete bilješke predstavljaju SQL izraze koji se izvršavaju pozivanjem anotiranih metoda:
    @Insert ("Umetni u vrijednosti osobe (ime) (# {ime})") javno Integer spremanje (osoba osoba); @Update ("Update Person set name = # {name} where personId = # {personId}") public void updatePerson (Osoba osoba); @Delete ("Delete from Person where personId = # {personId}") javna praznina deletePersonById (Integer personId); @Select ("SELECT person.personId, person.name FROM person WHERE person.personId = # {personId}") Osoba getPerson (Integer personId);
  • @ Rezultati - to je popis preslikavanja rezultata koji sadrže detalje o načinu preslikavanja stupaca baze podataka u atribute Java klase:
    @Select ("Select personId, name from Person where personId = # {personId}") @Results (value = {@Result (property = "personId", column = "personId") // ...}) public Person getPersonById (Integer personId);
  • @Proizlaziti - predstavlja jedan primjerak Proizlaziti izvan popisa rezultata preuzetog sa @ Rezultati. Uključuje detalje poput mapiranja iz stupca baze podataka u svojstvo Java zrna, vrstu svojstva Java i povezanost s drugim Java objektima:
    @Results (value = {@Result (property = "personId", column = "personId"), @Result (property = "name", column = "name"), @Result (property = "adrese", javaType = List .class) // ...}) public Person getPersonById (Integer personId);
  • @Punospecificira preslikavanje jednog objekta u zbirku drugih objekata:
    @Rezultati (vrijednost = {@Result (svojstvo = "adrese", javaType = List.class, column = "personId", [e-pošta zaštićena] (select = "getAddresses"))})

    Ovdje getAddresses je metoda koja vraća zbirku Adresa upitom tablice adresa.

    @Select ("select addressId, streetAddress, personId s adrese na kojoj je personId = # {personId}") javna adresa getAddresses (Integer personId);

    Slično @Puno napomena, imamo @Jedan napomena koja specificira jedan prema jedan odnos mapiranja između objekata.

  • @MapKeyovo se koristi za pretvaranje popisa zapisa u Karta zapisa s ključem kako je definirano vrijednost atribut:
    @Select ("select * from Person") @MapKey ("personId") Map getAllPerson ();
  • @Opcijeova napomena specificira širok raspon sklopki i konfiguracije koje treba definirati kako bismo ih mogli definirati na drugim izrazima @Opcije kako bi ih definirali:
    @Insert ("Umetni u vrijednosti adrese (streetAddress, personId) (# {streetAddress}, # {personId})") @Options (useGeneratedKeys = false, flushCache = true) public Integer saveAddress (Adresa adresa);

6. Dinamički SQL

Dinamički SQL vrlo je moćna značajka koju pruža MyBatis. Pomoću toga možemo točno strukturirati naš složeni SQL.

S tradicionalnim JDBC kodom moramo pisati SQL izraze, spajati ih s točnošću razmaka između njih i stavljajući zareze na prava mjesta. Ovo je vrlo sklono pogreškama i vrlo je teško ispraviti pogreške, u slučaju velikih SQL izraza.

Istražimo kako možemo koristiti dinamički SQL u našoj aplikaciji:

@SelectProvider (type = MyBatisUtil.class, method = "getPersonByName") javna osoba getPersonByName (naziv niza);

Ovdje smo naveli klasu i ime metode koja zapravo konstruira i generira konačni SQL:

javna klasa MyBatisUtil {// ... javni String getPersonByName (Ime niza) {return new SQL () {{SELECT ("*"); FROM ("osoba"); WHERE ("ime poput # {name} || '%'"); }}. toString (); }}

Dinamički SQL pruža sve SQL konstrukcije kao klasu, na pr. ODABERI, GDJE itd. Ovim možemo dinamički mijenjati generaciju GDJE klauzula.

7. Podrška za pohranjeni postupak

Pohranjenu proceduru također možemo izvršiti pomoću @Odaberi bilješka. Ovdje trebamo proslijediti ime pohranjene procedure, popis parametara i koristiti eksplicitno Poziv tom postupku:

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

8. Zaključak

U ovom smo brzom uputstvu vidjeli različite značajke koje pruža MyBatis i kako olakšava razvoj aplikacija s kojima se suočavaju baze podataka. Također smo vidjeli razne napomene koje pruža knjižnica.

Kompletni kôd za ovaj članak dostupan je na GitHubu.