Pripojte Javu k databáze MySQL

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

Existuje mnoho spôsobov, ako sa môžeme pripojiť k databáze MySQL z Javy a v tomto tutoriále preskúmame niekoľko možností, ako to dosiahnuť.

Začneme tým, že sa pozrieme na najobľúbenejšie možnosti pomocou JDBC a Hibernate.

Potom sa tiež pozrieme na niektoré externé knižnice vrátane MyBatis, Apache Cayenne a Spring Data. Postupom času poskytneme niekoľko praktických príkladov.

2. Predpoklady

Budeme predpokladať, že už máme nainštalovaný a spustený server MySQL na localhost (predvolený port 3306) a že máme testovaciu schému s nasledujúcou tabuľkou osôb:

CREATE TABLE osoba (ID INT, FIRST_NAME VARCHAR (100), LAST_NAME VARCHAR (100));

Budeme tiež potrebovať mysql-konektor-java artefakt, ktorý je ako vždy dostupný z Maven Central:

 mysql mysql-konektor-java 8.0.19 

3.Pripojenie pomocou JDBC

JDBC (Java Database Connectivity) je API na pripájanie a vykonávanie dotazov v databáze.

3.1. Spoločné vlastnosti

V priebehu tohto článku zvyčajne použijeme niekoľko bežných vlastností JDBC:

  • Connection URL - reťazec, ktorý používa ovládač JDBC na pripojenie k databáze. Môže obsahovať informácie, ako napríklad kde hľadať databázu, názov databázy, ku ktorej sa chcete pripojiť, a ďalšie konfiguračné vlastnosti:
    jdbc: mysql: // [hostiteľ] [, failoverhost ...] [: port] / [databáza] [? propertyName1] [= propertyValue1] [& propertyName2] [= propertyValue2] ...

    Nastavíme túto vlastnosť takto: jdbc: mysql: // localhost: 3306 / test? serverTimezone = UTC

  • Trieda vodiča - úplný názov triedy vodiča, ktorý sa má použiť. V našom prípade použijeme ovládač MySQL: com.mysql.cj.jdbc.Driver
  • Používateľské meno a heslo - prihlasovacie údaje k účtu MySQL

3.2. Príklad pripojenia JDBC

Pozrime sa, ako sa môžeme pripojiť k našej databáze a vykonať jednoduchý výber všetkých pomocou zdroja vyskúšania s viacerými zdrojmi:

Reťazec sqlSelectAllPersons = "ZVOLIŤ * OD osoby"; Reťazec connectionUrl = "jdbc: mysql: // localhost: 3306 / test? ServerTimezone = UTC"; try (Connection conn = DriverManager.getConnection (connectionUrl, "username", "password"); PreparedStatement ps = conn.prepareStatement (sqlSelectAllPersons); ResultSet rs = ps.executeQuery ()) {while (rs.next ()) {long id = rs.getLong ("ID"); Názov reťazca = rs.getString ("FIRST_NAME"); Reťazec lastName = rs.getString ("LAST_NAME"); // urobte niečo s extrahovanými údajmi ...}} chytiť (SQLException e) {// zvládnuť výnimku}

Ako vidíme, vo vnútri skús tela, iterujeme výslednú množinu a extrahujeme hodnoty z tabuľky osôb.

4.Pripojenie pomocou ORM

Typickejšie je, že sa pripojíme k našej databáze MySQL pomocou frameworku Object Relational Mapping (ORM). Pozrime sa teda na niektoré príklady spojení, ktoré využívajú populárnejšie z týchto rámcov.

4.1. Natívne rozhrania API pre dlhodobý spánok

V tejto časti uvidíme, ako používať režim dlhodobého spánku na správu pripojenia JDBC k našej databáze.

Najprv musíme pridať hibernácia-jadro Maven závislosť:

 org.hibernate hibernate-core 5.4.10.Final 

Režim dlhodobého spánku vyžaduje, aby bola pre každú tabuľku vytvorená trieda entít. Poďme ďalej a definujme Osoba trieda:

@Entity @Table (name = "Osoba") verejná trieda Osoba {@Id Long id; @Column (name = "FIRST_NAME") Reťazec firstName; @Column (name = "LAST_NAME") reťazec priezvisko; // zakladatelia a zakladatelia} 

Ďalším podstatným aspektom je vytvorenie súboru prostriedkov dlhodobého spánku, zvyčajne pomenovaného hibernate.cfg.xml, kde definujeme konfiguračné informácie:

     com.mysql.cj.jdbc.Driver jdbc: mysql: // localhost: 3306 / test? serverTimezone = UTC heslo používateľa org.hibernate.dialect.MySQL5Dialect overiť 

Hibernácia má veľa konfiguračných vlastností. Okrem štandardných vlastností pripojenia stojí za zmienku vlastnosť dialekt, ktorá nám umožňuje určiť názov SQL dialektu pre databázu.

Túto vlastnosť rámec používa na správnu konverziu príkazov Hibernate Query Language (HQL) na vhodný SQL pre našu databázu. Hibernácia sa dodáva s viac ako 40 dialektmi jazyka SQL. Pretože sa v tomto článku zameriavame na MySQL, zostaneme pri tom MySQL5Dialect nárečie.

Nakoniec, program Hibernate tiež potrebuje poznať úplný názov triedy entity prostredníctvom mapovacej značky. Po dokončení konfigurácie použijeme SessionFactory trieda, ktorá je triedou zodpovednou za vytváranie a združovanie pripojení JDBC.

Spravidla je pre aplikáciu potrebné toto nastavenie nastaviť iba raz:

SessionFactory sessionFactory; // konfiguruje nastavenia z hibernate.cfg.xml registra StandardServiceRegistry = nový StandardServiceRegistryBuilder (). configure (). build (); skúste {sessionFactory = new MetadataSources (register) .buildMetadata (). buildSessionFactory (); } catch (Výnimka e) {// zvládnuť výnimku}

Teraz, keď máme naše pripojenie nastavené, môžeme spustiť dopyt, aby sme vybrali všetkých ľudí z našej tabuľky osôb:

Relácia session = sessionFactory.openSession (); session.beginTransaction (); Výsledok zoznamu = session.createQuery ("od osoby", Person.class) .list (); result.forEach (person -> {// urobte niečo s Person instance ...}); session.getTransaction (). commit (); session.close ();

4.2. MyBatis

MyBatis bol predstavený v roku 2010 a je to rámec mapovača SQL s jednoduchosťou. V ďalšom tutoriáli sme hovorili o tom, ako integrovať MyBatis s Spring a Spring Boot. Tu sa zameriame na to, ako konfigurovať MyBatis priamo.

Aby sme ho mohli použiť, musíme pridať mybatis závislosť:

 org.mybatis mybatis 3.5.3 

Za predpokladu, že znovu použijeme Osoba triedy vyššie bez anotácií, môžeme pokračovať k vytvoreniu a PersonMapper rozhranie:

verejné rozhranie PersonMapper {String selectAll = "SELECT * FROM Person"; @Select (selectAll) @Results (value = {@Result (property = "id", column = "ID"), @Result (property = "firstName", column = "FIRST_NAME"), @Result (property = "lastName" ", column =" LAST_NAME ")}) Zoznam selectAll (); }

Ďalším krokom je konfigurácia MyBatis:

Konfigurácia initMybatis () hodí SQLException {DataSource dataSource = getDataSource (); TransactionFactory trxFactory = nový JdbcTransactionFactory (); Environment env = new Environment ("dev", trxFactory, dataSource); Konfigurácia config = nová konfigurácia (env); TypeAliasRegistry aliases = config.getTypeAliasRegistry (); aliases.registerAlias ​​("osoba", Person.class); config.addMapper (PersonMapper.class); návratová konfigurácia; } DataSource getDataSource () hodí SQLException {MysqlDataSource dataSource = nový MysqlDataSource (); dataSource.setDatabaseName ("test"); dataSource.setServerName ("localhost"); dataSource.setPort (3306); dataSource.setUser ("používateľské meno"); dataSource.setPassword ("heslo"); dataSource.setServerTimezone ("UTC"); vrátiť dátový zdroj; }

Konfigurácia spočíva v vytvorení a Konfigurácia objekt, ktorý je kontajnerom pre nastavenia, ako napríklad Životné prostredie. Obsahuje tiež nastavenie zdroja údajov.

Potom môžeme použiť Konfigurácia objekt, ktorý je za normálnych okolností nastavený pre aplikáciu na vytvorenie a SqlSessionFactory:

Konfigurácia konfigurácie = initMybatis (); SqlSessionFactory sqlSessionFactory = nový SqlSessionFactoryBuilder (). Build (konfigurácia); try (SqlSession session = sqlSessionFactory.openSession ()) {PersonMapper mapper = session.getMapper (PersonMapper.class); Zoznam osôb = mapper.selectAll (); // niečo urobte so zoznamom osôb ...}

4.3. Apache Cayenne

Apache Cayenne je rámec pre perzistenciu, ktorého prvé vydanie sa datuje rokom 2002. Ak sa o ňom chcete dozvedieť viac, odporúčame vám prečítať si náš úvod do Apache Cayenne.

Ako obvykle, pridajme kajenský server Závislosť Maven:

 org.apache.cayenne cayenne-server 4.0.2 

Špeciálne sa zameriame na nastavenia pripojenia MySQL. V takom prípade nakonfigurujeme cayenne-project.xml:

Po automatickom vygenerovaní datamap.map.xml a Osoba triedy formou a CayenneDataObject, môžeme vykonať niekoľko otázok.

Napríklad budeme pokračovať ako predtým výberom všetkých:

ServerRuntime cayenneRuntime = ServerRuntime.builder () .addConfig ("cayenne-project.xml") .build (); ObjectContext context = cayenneRuntime.newContext (); Zoznam osôb = ObjectSelect.query (Person.class) .select (kontext); // urob niečo s osobným zoznamom ...

5.Pripojenie pomocou údajov z jari

Spring Data je jarný programovací model pre prístup k údajom. Technicky je Spring Data zastrešujúcim projektom, ktorý obsahuje veľa podprojektov, ktoré sú špecifické pre danú databázu.

Pozrime sa, ako použiť dva z týchto projektov na pripojenie k databáze MySQL.

5.1. Jarné údaje / JPA

Spring Data JPA je robustný rámec, ktorý pomáha znižovať štandardný kód a poskytuje mechanizmus na implementáciu základných operácií CRUD prostredníctvom jedného z niekoľkých preddefinovaných rozhraní úložiska. Okrem toho má mnoho ďalších užitočných funkcií.

Nezabudnite sa pozrieť na náš úvod do Spring Data JPA a dozvedieť sa viac.

The spring-data-jpa artefakt nájdete na Maven Central:

 org.springframework.data spring-data-jpa 2.2.4.RELEASE 

Budeme pokračovať v používaní Osoba trieda. Ďalším krokom je konfigurácia JPA pomocou anotácií:

@Configuration @EnableJpaRepositories ("packages.to.scan") verejná trieda JpaConfiguration {@Bean public DataSource dataSource () {DriverManagerDataSource dataSource = nový DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / test? serverTimezone = UTC"); dataSource.setUsername ("používateľské meno"); dataSource.setPassword ("heslo"); vrátiť dátový zdroj; } @Bean public JpaTransactionManager transactionManager (EntityManagerFactory emf) {vrátiť nový JpaTransactionManager (emf); } @Bean public JpaVendorAdapter jpaVendorAdapter () {HibernateJpaVendorAdapter jpaVendorAdapter = nový HibernateJpaVendorAdapter (); jpaVendorAdapter.setDatabase (Database.MYSQL); jpaVendorAdapter.setGenerateDdl (true); návrat jpaVendorAdapter; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory () {LocalContainerEntityManagerFactoryBean lemfb = nový LocalContainerEntityManagerFactoryBean (); lemfb.setDataSource (dataSource ()); lemfb.setJpaVendorAdapter (jpaVendorAdapter ()); lemfb.setPackagesToScan ("packages.containing.entity.classes"); vrátiť lemfb; }}

Aby sme mohli Spring Data implementovať operácie CRUD, musíme vytvoriť rozhranie, ktoré rozširuje Úložisko Crud rozhranie:

@Repository verejné rozhranie PersonRepository rozširuje CrudRepository {}

A nakoniec sa pozrime na príklad select-all s Spring Data:

personRepository.findAll (). forEach (person -> {// urobte niečo s extrahovanou osobou});

5.2. Jarné dáta / JDBC

Spring Data JDBC je obmedzená implementácia rodiny Spring Data, ktorej primárnym cieľom je umožniť jednoduchý prístup k relačným databázam.

Z tohto dôvodu neposkytuje funkcie ako ukladanie do vyrovnávacej pamäte, špinavé sledovanie, lenivé načítanie a mnoho ďalších funkcií protokolu JPA.

Tentokrát je to závislosť Maven, ktorú potrebujeme spring-data-jdbc:

 org.springframework.data spring-data-jdbc 1.1.4.RELEASE 

Konfigurácia je ľahšia v porovnaní s konfiguráciou, ktorú sme použili v predchádzajúcej časti pre Spring Data JPA:

@Configuration @EnableJdbcRepositories ("packages.to.scan") verejná trieda JdbcConfiguration rozširuje AbstractJdbcConfiguration {// NamedParameterJdbcOperations sa interne používa na odosielanie príkazov SQL do databázy @Bean NamedParameterJdbcOperations operácie () {return new Named dataDar () } @Bean PlatformTransactionManager transactionManager () {vrátiť nový DataSourceTransactionManager (dataSource ()); } @Bean public DataSource dataSource () {DriverManagerDataSource dataSource = nový DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / test? serverTimezone = UTC"); dataSource.setUsername ("používateľské meno"); dataSource.setPassword ("heslo"); vrátiť dátový zdroj; }}

V prípade Spring Data JDBC musíme definovať nový Osoba triedy alebo upraviť existujúci tak, aby pridával niektoré anotácie špecifické pre Spring.

Je to preto, že Spring Data JDBC sa postará priamo o mapovanie entít namiesto režimu dlhodobého spánku:

importovať org.springframework.data.annotation.Id; importovať org.springframework.data.relational.core.mapping.Column; importovať org.springframework.data.relational.core.mapping.Table; @Table (value = "Person") verejná trieda Person {@Id Long id; @Column (value = "FIRST_NAME") Reťazec firstName; @Column (hodnota = "LAST_NAME") reťazec priezvisko; // zakladatelia a zakladatelia}

S Spring Data JDBC môžeme tiež použiť Úložisko Crud rozhranie. Deklarácia bude teda identická s deklaráciou, ktorú sme napísali vyššie v príklade Spring Data JPA. To isté platí pre príklad typu „všetko“.

6. Záver

V tomto tutoriáli sme videli niekoľko rôznych spôsobov pripojenia k databáze MySQL z Javy. Začali sme základným pripojením JDBC. Potom sme sa pozreli na bežne používané ORM ako Hibernate, Mybatis a Apache Cayenne. Na záver sme sa pozreli na Spring Data JPA a Spring Data JDBC.

Používanie rozhraní JDBC alebo Hibernate API znamená viac štandardného kódu. Používanie robustných rámcov, ako napríklad Spring Data alebo Mybatis, vyžaduje viac konfigurácie, ale poskytuje významnú výhodu, pretože poskytuje predvolené implementácie a funkcie, ako je ukladanie do vyrovnávacej pamäte a lenivé načítanie.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

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