Csatlakoztassa a Java-t egy MySQL adatbázishoz
Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:
>> ELLENŐRIZZE A FOLYAMATOT1. Áttekintés
Sokféleképpen kapcsolódhatunk a MySQL adatbázishoz a Java-ból, és ebben az oktatóanyagban több lehetőséget is meg fogunk vizsgálni, hogy miként lehet ezt elérni.
Kezdjük azzal, hogy megvizsgáljuk a JDBC és a Hibernate használatával vitathatatlanul legnépszerűbb lehetőségeket.
Ezután néhány külső könyvtárat is megvizsgálunk, beleértve a MyBatis, az Apache Cayenne és a Spring Data programokat. Útközben számos gyakorlati példát közölünk.
2. Előfeltételek
Feltételezzük, hogy már van egy MySQL szerver telepítve és futtatva a localhoston (alapértelmezett 3306-os port), és hogy van egy teszt sémánk a következő személy táblával:
CREATE TABLE személy (ID INT, FIRST_NAME VARCHAR (100), LAST_NAME VARCHAR (100));
Szükségünk lesz a mysql-connector-java műtárgy, amely mint mindig elérhető a Maven Central-tól:
mysql mysql-connector-java 8.0.19
3.Csatlakozás a JDBC használatával
A JDBC (Java Database Connectivity) egy API lekérdezések összekapcsolására és végrehajtására egy adatbázisban.
3.1. Közös tulajdonságok
A cikk folyamán általában több általános JDBC tulajdonságot fogunk használni:
- Kapcsolat URL - egy karaktersorozat, amelyet a JDBC illesztőprogram használ az adatbázishoz való csatlakozáshoz. Tartalmazhat olyan információkat, mint például az adatbázis keresési helye, a csatlakozáshoz szükséges adatbázis neve és egyéb konfigurációs tulajdonságok:
jdbc: mysql: // [host] [, failoverhost ...] [: port] / [adatbázis] [? propertyName1] [= propertyValue1] [& propertyName2] [= propertyValue2] ...
Ezt a tulajdonságot úgy állítjuk be: jdbc: mysql: // localhost: 3306 / test? serverTimezone = UTC
- Vezetőosztály - a használni kívánt vezető teljes osztályú neve. Esetünkben a MySQL illesztőprogramot fogjuk használni: com.mysql.cj.jdbc.Driver
- Felhasználónév és jelszó - a MySQL-fiók hitelesítő adatai
3.2. JDBC csatlakozási példa
Lássuk, hogyan tudunk csatlakozni az adatbázisunkhoz és végrehajtani egy egyszerű kijelölést egy erőforrás-próbálkozás segítségével:
String sqlSelectAllPersons = "SELECT * FROM személy"; Karakterlánc-kapcsolatUrl = "jdbc: mysql: // localhost: 3306 / test? ServerTimezone = UTC"; próbáld meg (Connection connect = DriverManager.getConnection (connectionUrl, "felhasználónév", "jelszó"); PreparedStatement ps = conn.prepareStatement (sqlSelectAllPersons); ResultSet rs = ps.executeQuery ()) {while (rs.next ()) {long id = rs.getLong ("ID"); Karakterlánc neve = rs.getString ("FIRST_NAME"); Karakterlánc vezetéknév = rs.getString ("LAST_NAME"); // tegyen valamit a kivont adatokkal ...}} catch (SQLException e) {// kezelje a kivételt}
Mint láthatjuk, a próbáld ki testet, végigvezetjük az eredményhalmazon, és kivonjuk az értékeket a személytáblázatból.
4.Csatlakozás ORM-ek használatával
Jellemzőbb módon a MySQL adatbázisunkhoz egy Object Relational Mapping (ORM) keretrendszer segítségével csatlakozunk. Tehát nézzünk meg néhány kapcsolódási példát, amelyek e keretek közül a legnépszerűbbeket használják.
4.1. Natív hibernált API-k
Ebben a szakaszban megtudhatjuk, hogyan lehet a Hibernate használatával kezelni az adatbázisunkhoz tartozó JDBC kapcsolatot.
Először hozzá kell adnunk a hibernált mag Maven-függőség:
org.hibernate hibernate-core 5.4.10.Végső
A hibernáláshoz minden egyes táblához létre kell hozni egy entitásosztályt. Menjünk előre, és definiáljuk a Személy osztály:
@Entity @Table (név = "Személy") nyilvános osztály Személy {@Id Hosszú id; @ Oszlop (név = "FIRST_NAME") Karakterlánc keresztnév; @ Oszlop (név = "LAST_NAME") Karakterlánc vezetéknév; // getters & setters}
Egy másik lényeges szempont a Hibernate erőforrásfájl létrehozása, amelyet általában elneveznek hibernate.cfg.xml, ahol meghatározzuk a konfigurációs információkat:
com.mysql.cj.jdbc.Driver jdbc: mysql: // localhost: 3306 / test? serverTimezone = UTC felhasználónév jelszó org.hibernate.dialect.MySQL5Dialect érvényesítés
A hibernálásnak sok konfigurációs tulajdonsága van. A szokásos kapcsolattulajdonságok mellett érdemes megemlíteni a dialektus tulajdonságot, amely lehetővé teszi számunkra, hogy megadjuk az adatbázis SQL-dialektusának nevét.
Ezt a tulajdonságot használja a keretrendszer a Hibernate Query Language (HQL) utasítások megfelelő átalakítására az adott adatbázisunk megfelelő SQL-be. A hibernálás több mint 40 SQL-dialektussal rendelkezik. Mivel ebben a cikkben a MySQL-re koncentrálunk, maradunk a MySQL5Dialect nyelvjárás.
Végül a Hibernate-nek tudnia kell az entitásosztály teljes minősítésű nevét is a leképező címkén keresztül. Miután befejeztük a konfigurációt, használjuk a SessionFactory osztály, amely a JDBC kapcsolatok létrehozásáért és egyesítéséért felelős osztály.
Általában ezt csak egyszer kell beállítani egy alkalmazáshoz:
SessionFactory sessionFactory; // konfigurálja a hibernate.cfg.xml beállításokat a StandardServiceRegistry registry = new StandardServiceRegistryBuilder (). configure (). build (); próbáld ki az {sessionFactory = new MetadataSources (register) .buildMetadata (). buildSessionFactory (); } catch (e kivétel) {// a kivétel kezelése}
Most, hogy létrejött a kapcsolatunk, futtathatunk egy lekérdezést, hogy kiválasszuk az összes embert a személyi táblázatunkból:
Munkamenet = sessionFactory.openSession (); session.beginTransaction (); Lista eredménye = session.createQuery ("személytől", Személy.osztály) .lista (); result.forEach (személy -> {// tegyen valamit a Személy példánnyal ...}); session.getTransaction (). kötelezettség (); session.close ();
4.2. MyBatis
A MyBatis 2010-ben került bevezetésre, és egy SQL mapper keretrendszer, amelynek erőssége az egyszerűség. Egy másik oktatóanyagban arról beszéltünk, hogy miként integrálható a MyBatis a Spring and Spring Boot programba. Itt a MyBatis közvetlen konfigurálására összpontosítunk.
Használatához hozzá kell adnunk a mybatis függőség:
org.mybatis mybatis 3.5.3
Feltéve, hogy újrafelhasználjuk a Személy osztályban anotációk nélkül folytathatjuk a PersonMapper felület:
nyilvános felület PersonMapper {String selectAll = "SELECT * FROM Person"; @Select (selectAll) @Results (value = {@Result (tulajdonság = "id", oszlop = "ID"), @Result (tulajdonság = "keresztnév", oszlop = "FIRST_NAME"), @Result (tulajdonság = "vezetéknév" ", oszlop =" LAST_NAME ")}) Lista selectAll (); }
A következő lépés a MyBatis konfigurációjáról szól:
Az initMybatis () konfiguráció eldobja az SQLException {DataSource dataSource = getDataSource (); TransactionFactory trxFactory = new JdbcTransactionFactory (); Környezet env = új Környezet ("dev", trxFactory, dataSource); Configuration config = new Configuration (env); TypeAliasRegistry aliases = config.getTypeAliasRegistry (); aliases.registerAlias ("személy", Személy.osztály); config.addMapper (PersonMapper.class); return config; } DataSource getDataSource () dobja az SQLException {MysqlDataSource dataSource = új MysqlDataSource (); dataSource.setDatabaseName ("teszt"); dataSource.setServerName ("localhost"); dataSource.setPort (3306); dataSource.setUser ("felhasználónév"); dataSource.setPassword ("jelszó"); dataSource.setServerTimezone ("UTC"); return dataSource; }
A konfiguráció a Konfiguráció objektum, amely az olyan beállítások tárolója, mint a Környezet. Tartalmazza az adatforrás beállításait is.
Ezután használhatjuk a Konfiguráció objektum, amelyet általában egyszer állítanak be egy alkalmazás számára a SqlSessionFactory:
Konfigurációs konfiguráció = initMybatis (); SqlSessionFactory sqlSessionFactory = új SqlSessionFactoryBuilder (). Build (konfiguráció); try (SqlSession session = sqlSessionFactory.openSession ()) {PersonMapper mapper = session.getMapper (PersonMapper.class); Személyek felsorolása = mapper.selectAll (); // tegyen valamit a személyek listájával ...}
4.3. Apache Cayenne
Az Apache Cayenne egy olyan perzisztencia keretrendszer, amelynek első kiadása 2002-re nyúlik vissza. További információért javasoljuk, hogy olvassa el az Apache Cayenne bevezetését.
Szokás szerint tegyük hozzá a cayenne-szerver Maven-függőség:
org.apache.cayenne cayenne-server 4.0.2
Kifejezetten a MySQL kapcsolati beállításokra fogunk összpontosítani. Ebben az esetben konfiguráljuk a cayenne-project.xml:
A. Automatikus generálása után datamap.map.xml és Személy osztály a formájában CayenneDataObject, végrehajthatunk néhány kérdést.
Például folytatjuk a korábbiakhoz hasonlóan az összeset:
ServerRuntime cayenneRuntime = ServerRuntime.builder () .addConfig ("cayenne-project.xml") .build (); ObjectContext context = cayenneRuntime.newContext (); Személyek felsorolása = ObjectSelect.query (Person.class) .select (context); // tegyen valamit a személyek listájával ...
5.Csatlakozás a tavaszi adatok használatával
A Spring Data egy tavaszi programozási modell az adatokhoz való hozzáféréshez. Technikailag a Spring Data egy ernyő projekt, amely számos alprojektet tartalmaz, amelyek egy adott adatbázisra jellemzőek.
Lássuk, hogyan használhat két ilyen projektet a MySQL adatbázishoz való csatlakozáshoz.
5.1. Tavaszi adatok / JPA
A Spring Data JPA egy robusztus keretrendszer, amely segít csökkenteni a kazánlap kódját, és mechanizmust biztosít az alapvető CRUD műveletek végrehajtására a több előre definiált tárolói interfész egyikén keresztül.. Emellett számos más hasznos funkcióval is rendelkezik.
További információkért olvassa el a Spring Data JPA bevezetését.
A spring-data-jpa műtárgy megtalálható a Maven Central-on:
org.springframework.data spring-data-jpa 2.2.4.KÖZLEMÉNY
Folytatjuk a Személy osztály. A következő lépés a JPA beállítása kommentárokkal:
@Configuration @EnableJpaRepositories ("package.to.scan") nyilvános osztályú JpaConfiguration {@Bean public DataSource dataSource () {DriverManagerDataSource dataSource = new DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / test? serverTimezone = UTC"); dataSource.setUsername ("felhasználónév"); dataSource.setPassword ("jelszó"); return dataSource; } @Bean public JpaTransactionManageractionManager (EntityManagerFactory emf) {return new JpaTransactionManager (emf); } @Bean public JpaVendorAdapter jpaVendorAdapter () {HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter (); jpaVendorAdapter.setDatabase (Adatbázis.MYSQL); jpaVendorAdapter.setGenerateDdl (true); return jpaVendorAdapter; } @Bean public LocalContainerEntityManagerFactoryBean entitásManagerFactory () {LocalContainerEntityManagerFactoryBean lemfb = új LocalContainerEntityManagerFactoryBean (); lemfb.setDataSource (dataSource ()); lemfb.setJpaVendorAdapter (jpaVendorAdapter ()); lemfb.setPackagesToScan ("package.containing.entity.classes"); visszatér lemfb; }}
Ahhoz, hogy a Spring Data megvalósítsa a CRUD műveleteket, létre kell hoznunk egy interfészt, amely kiterjeszti a CrudRepository felület:
@Repository nyilvános felület A PersonRepository kiterjeszti a CrudRepository {}
És végül lássunk egy példát az összes kiválasztására a tavaszi adatokkal:
personRepository.findAll (). forEach (person -> {// tegyen valamit a kibontott személlyel});
5.2. Tavaszi adatok / JDBC
A Spring Data JDBC a Spring Data család korlátozott megvalósítása, amelynek elsődleges célja a relációs adatbázisokhoz való egyszerű hozzáférés lehetővé tétele.
Emiatt nem nyújt olyan funkciókat, mint a gyorsítótár, a piszkos követés, a lusta betöltés és sok más JPA funkció.
Ezúttal a Maven-függőségre van szükségünk spring-data-jdbc:
org.springframework.data spring-data-jdbc 1.1.4.KÖZLEMÉNY
A konfiguráció könnyebb ahhoz képest, amelyet az előző szakaszban használtunk a Spring Data JPA-hoz:
@Configuration @EnableJdbcRepositories ("package.to.scan") nyilvános osztály A JdbcConfiguration kiterjeszti az AbstractJdbcConfiguration {// NamedParameterJdbcOperations-t belsőleg használják SQL-utasítások elküldéséhez a @Bean NamedParameterJdbcOperdációs műveletek ((new); } @Bean PlatformTransactionManageractionManager () {return new DataSourceTransactionManager (dataSource ()); } @Bean public DataSource dataSource () {DriverManagerDataSource dataSource = új DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / test? serverTimezone = UTC"); dataSource.setUsername ("felhasználónév"); dataSource.setPassword ("jelszó"); return dataSource; }}
A Spring Data JDBC esetében meg kell határoznunk egy újat Személy osztályban vagy módosítsa a meglévőt néhány tavaszi megjegyzés hozzáadásához.
Ennek oka, hogy a Spring Data JDBC a hibernálás helyett közvetlenül az entitás leképezéséről gondoskodik:
import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Column; import org.springframework.data.relational.core.mapping.Table; @Table (value = "Person") public class Person {@Id Long id; @ Oszlop (érték = "FIRST_NAME") Karakterlánc keresztnév; @ Oszlop (érték = "LAST_NAME") Karakterlánc vezetéknév; // szerelők és beállítók}
A Spring Data JDBC-vel a CrudRepository felület. Tehát a nyilatkozat megegyezik azzal, amelyet fentebb írtunk a Spring Data JPA példában. Hasonlóképpen, ugyanez vonatkozik az Összes kijelölése példára is.
6. Következtetés
Ebben az oktatóanyagban számos különböző módszert láthattunk, hogyan lehet csatlakozni egy MySQL adatbázishoz Java-ból. A nélkülözhetetlen JDBC kapcsolattal kezdtük. Ezután olyan gyakran használt ORM-eket néztünk meg, mint a Hibernate, a Mybatis és az Apache Cayenne. Végül megnéztük a Spring Data JPA-t és a Spring Data JDBC-t.
A JDBC vagy a Hibernate API-k használata több kazánlap kódot jelent. A robusztus keretek, például a Spring Data vagy a Mybatis használata nagyobb konfigurációt igényel, de jelentős előnyt jelent, mert alapértelmezett megvalósításokat és funkciókat biztosítanak, mint például a gyorsítótár és a lusta betöltés.
Java alsó