Útmutató a tavaszi JPA-hoz

1. Áttekintés

Ez az oktatóanyag bemutatja, hogyan állítsák be a tavaszt a JPA-val, a hibernált állapotot kitartás-szolgáltatóként használja.

A Spring kontextus Java-alapú konfigurációval és az alap Maven pom használatával történő lépésről lépésre történő bemutatásához olvassa el ezt a cikket.

Kezdjük azzal, hogy a JPA-t létrehozzuk egy Spring Boot projektben, majd megvizsgáljuk a teljes konfigurációt, amelyre szükségünk van, ha van egy standard Spring projektünk.

Itt van egy videó a Hibernate 4 beállításáról a 4-es rugóval (azt javaslom, hogy nézze meg teljes 1080p-ben):

2. JPA a tavaszi csizmában

A Spring Boot projekt célja, hogy a Spring alkalmazások létrehozását sokkal gyorsabbá és könnyebbé tegye. Ez az önindítók és az automatikus konfigurálás használatával történik a különböző tavaszi funkciókhoz, köztük a JPA-hoz.

2.1. Maven-függőségek

A JPA engedélyezéséhez a Spring Boot alkalmazásban szükségünk van a rugós-bakancs-indító és spring-boot-starter-data-jpa függőségek:

 org.springframework.boot spring-boot-starter 2.2.6.RELEASE org.springframework.boot spring-boot-starter-data-jpa 2.2.6.RELEASE 

A rugós-bakancs-indító tartalmazza a tavaszi JPA-hoz szükséges automatikus konfigurációt. Továbbá a tavasz-bakancs-indító-jpa a projekt hivatkozik az összes szükséges függőségre, mint pl hibernált mag.

2.2. Konfiguráció

A Spring Boot konfigurálódik Hibernálás mint a JPA alapértelmezett szolgáltatója, ezért már nem szükséges meghatározni a entitásManagerFactory bab, hacsak nem akarjuk testre szabni.

A Spring Boot automatikusan konfigurálhatja a adatforrás bab, az általunk használt adatbázistól függően. Típusú memóriában lévő adatbázis esetén H2, HSQLDB, és Apache Derby, A Boot automatikusan konfigurálja a Adatforrás ha a megfelelő adatbázis-függőség jelen van az osztályúton.

Például, ha memóriát akarunk használni H2 adatbázis egy Spring Boot JPA alkalmazásban, csak hozzá kell adnunk a h2 függőség a pom.xml fájl:

 com.h2adatbázis h2 1.4.2004 

Így nem kell meghatároznunk a adatforrás babot, de megtehetjük, ha testre akarjuk szabni.

Ha a JPA-t szeretnénk használni a MySQL adatbázis, akkor szükségünk van a mysql-connector-java függőséget, valamint meghatározni a Adatforrás konfiguráció.

Megtehetjük ezt a @ Konfiguráció osztályban, vagy szabványos Spring Boot tulajdonságokkal.

A Java konfiguráció ugyanúgy néz ki, mint egy szokásos Spring projektben:

@Bean public DataSource dataSource () {DriverManagerDataSource dataSource = új DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUsername ("mysqluser"); dataSource.setPassword ("mysqlpass"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / myDb? createDatabaseIfNotExist = true"); return dataSource; }

Az adatforrás tulajdonságfájl segítségével történő konfigurálásához be kell állítanunk a tulajdonságokkal előtagot tavasz.adatforrás:

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver spring.datasource.username = mysqluser spring.datasource.password = mysqlpass spring.datasource.url = jdbc: mysql: // localhost: 3306 / myDb ? createDatabaseIfNotExist = true

A Spring Boot automatikusan konfigurálja az adatforrást ezen tulajdonságok alapján.

A Spring Boot 1-ben is az alapértelmezett kapcsolatkészlet volt Kandúr, de a Spring Boot 2-vel a következőre változott: HikariCP.

További példákat találhat a JPA konfigurálására a Spring Boot alkalmazásban a GitHub projektben.

Mint láthatjuk, az alap JPA konfiguráció meglehetősen egyszerű, ha a Spring Boot-ot használjuk.

Azonban, ha van egy szokásos Spring projektünk, akkor egyértelműbb konfigurációra van szükségünk, akár Java, akár XML használatával. Erre fogunk összpontosítani a következő szakaszokban.

3. A JPA tavaszi konfigurációja Java-val - nem indító projektben

Ha a JPA-t egy tavaszi projektben kívánja felhasználni, fel kell állítanunk a EntityManager.

Ez a konfiguráció fő része, és meg tudjuk csinálni egy Spring gyári babon keresztül. Ez lehet az egyszerűbb is LocalEntityManagerFactoryBean vagy annál rugalmasabb LocalContainerEntityManagerFactoryBean.

Lássuk, hogyan használhatjuk az utóbbi lehetőséget:

@Configuration @EnableTransactionManagement nyilvános osztály PersistenceJPAConfig {@Bean public LocalContainerEntityManagerFactoryBean entitásManagerFactory () {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean (); em.setDataSource (dataSource ()); em.setPackagesToScan (új karakterlánc [] {"com.baeldung.persistence.model"}); JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter (); em.setJpaVendorAdapter (vendorAdapter); em.setJpaProperties (továbbiProperties ()); vissza em; } // ...}

Kifejezetten meg kell határoznunk a Adatforrás bab a fentiekben használtuk:

@Bean public DataSource dataSource () {DriverManagerDataSource dataSource = új DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / spring_jpa"); dataSource.setUsername ("tutorialuser"); dataSource.setPassword ("tutorialmy5ql"); return dataSource; }

A konfiguráció utolsó része a további hibernált tulajdonságok és a TransactionManager és kivételTranslation bab:

@Bean public PlatformTransactionManager tranzakcióManager () {JpaTransactionManager tranzakcióManager = új JpaTransactionManager (); tranzakcióManager.setEntityManagerFactory (entitásManagerFactory (). getObject ()); visszatérési tranzakcióManager; } @Bean public PersistenceExceptionTranslationPostProcessor kivételTranslation () {return new PersistenceExceptionTranslationPostProcessor (); } Tulajdonságok további tulajdonságok () {Tulajdonságok tulajdonságok = új Tulajdonságok (); properties.setProperty ("hibernálás.hbm2ddl.auto", "create-drop"); properties.setProperty ("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); visszatérési tulajdonságok; }

4. A JPA tavaszi konfigurálása XML-mel

Ezután nézzük meg ugyanazt a tavaszi konfigurációt az XML-lel:

        create-drop org.hibernate.dialect.MySQL5Dialect 

Viszonylag kicsi a különbség az XML és az új Java-alapú konfiguráció között. Nevezetesen az XML-ben egy másik babra való hivatkozás a babra vagy a babgyárra utalhat.

A Java-ban azonban, mivel a típusok különbözőek, a fordító nem engedélyezi, és így a EntityManagerFactory előbb lekerül a babgyárából, majd továbbítja a tranzakciókezelőnek:

tranzakcióManager.setEntityManagerFactory (entitásManagerFactory (). getObject ());

5. Teljes XML-mentes

Általában a JPA a perzisztencia egységet definiálja a META-INF / persistence.xml fájl. A 3.1 tavasztól kezdve a kitartás.xml már nincs szükség. A LocalContainerEntityManagerFactoryBean most támogatja a packageToScan tulajdonság, ahol a csomagok keresésre várnak @Entity osztályok megadhatók.

Ez a fájl volt az utolsó XML-darab, amelyet el kell távolítanunk. Most már teljesen felállíthatjuk a JPA-t XML nélkül.

A JPA tulajdonságait általában a kitartás.xml fájl. Alternatív megoldásként hozzáadhatjuk a tulajdonságokat közvetlenül az entitáskezelő gyárba:

factoryBean.setJpaProperties (this.additionalProperties ());

Megjegyzendő, hogy ha a hibernálás lenne a perzisztencia szolgáltató, akkor ez a módszer a hibernált állapot specifikus tulajdonságainak megadására is.

6. A Maven konfiguráció

A Spring Core és a perzisztencia függőségek mellett - amelyeket részletesen bemutat a Spring with Maven oktatóanyag - a projektben meg kell határoznunk a JPA-t és a Hibernate-t, valamint egy MySQL-csatlakozót:

 org.hibernate hibernate-core 5.2.17. Végső futásidejű mysql mysql-connector-java 8.0.19 futásidejű 

Ne feledje, hogy a MySQL-függőség itt szerepel példaként. Szükségünk van egy illesztőprogramra az adatforrás konfigurálásához, de bármelyik hibernálás által támogatott adatbázis megteszi.

7. Következtetés

Ez az oktatóanyag bemutatja a konfigurálást JPA a Hibernate-szel tavasszal mind a tavaszi csomagtartóban, mind a szokásos tavaszi alkalmazásban.

Mint mindig, a cikkben bemutatott kód elérhető a GitHubon.