מדריך ל- JPA עם אביב

1. סקירה כללית

מדריך זה מראה כיצד להגדיר את אביב עם JPA, משתמש ב- Hibernate כספק התמדה.

לקבלת מבוא שלב אחר שלב אודות הגדרת הקשר האביב באמצעות תצורה מבוססת Java ופום Maven הבסיסי לפרויקט, עיין במאמר זה.

נתחיל בהגדרת JPA בפרויקט Boot Boot ואז נבחן את התצורה המלאה שאנו זקוקים לה אם יש לנו פרויקט Spring סטנדרטי.

הנה סרטון על הגדרת Hibernate 4 עם Spring 4 (אני ממליץ לצפות בו במלוא 1080p):

2. JPA ב- Spring Boot

פרויקט Spring Boot נועד להפוך את יישומי האביב להרבה יותר קל וקל. זה נעשה באמצעות התחלה ותצורה אוטומטית עבור פונקציות אביב שונות, JPA ביניהן.

2.1. תלות Maven

כדי לאפשר JPA ביישום Spring Boot, אנו זקוקים ל אביב-אתחול-מתנע ו spring-boot-starter-data-jpa תלות:

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

ה אביב-אתחול-מתנע מכיל את התצורה האוטומטית הדרושה עבור אביב JPA. וגם ה אביב-אתחול-המתנע-jpa פרויקט מתייחס לכל התלות הדרושה כגון ליבת שינה.

2.2. תְצוּרָה

מגף האביב מוגדר שינה כספק ברירת המחדל של JPA, כך שכבר אין צורך להגדיר את entityManagerFactory שעועית אלא אם כן אנו רוצים להתאים אותה אישית.

אתחול האביב יכול גם להגדיר אוטומטית את מקור מידע שעועית, תלוי במסד הנתונים שאנו משתמשים בו. במקרה של מסד נתונים בזיכרון מהסוג H2, HSQLDB, ו דרבי אפאצ'י, Boot מגדיר את התצורה באופן אוטומטי מקור מידע אם התלות המקבילה של מסד הנתונים קיימת בנתיב הכיתה.

לדוגמא, אם אנו רוצים להשתמש בזיכרון H2 בסיס נתונים ביישום Spring Boot JPA, עלינו רק להוסיף את ה- h2 תלות ב- pom.xml קוֹבֶץ:

 com.h2database h2 1.4.200 

בדרך זו, איננו צריכים להגדיר את מקור מידע שעועית, אבל אנחנו יכולים לעשות זאת אם אנחנו רוצים להתאים אותה אישית.

אם אנחנו רוצים להשתמש ב- JPA עם MySQL מסד נתונים, אז אנחנו צריכים את mysql-connector-java תלות, כמו גם להגדיר את מקור מידע תְצוּרָה.

אנחנו יכולים לעשות זאת ב @תְצוּרָה בכיתה, או על ידי שימוש במאפיינים סטנדרטיים של קפיצי אתחול.

תצורת Java נראית כמו בפרויקט אביב סטנדרטי:

@Bean DataSource ציבורי DataSource () {DriverManagerDataSource dataSource = חדש DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUsername ("mysqluser"); dataSource.setPassword ("mysqlpass"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / myDb? createDatabaseIfNotExist = true"); להחזיר dataSource; }

כדי לקבוע את תצורת מקור הנתונים באמצעות קובץ מאפיינים, עלינו להגדיר קידומת מאפיינים spring.datasource:

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

Spring Boot יגדיר באופן אוטומטי מקור נתונים על בסיס מאפיינים אלה.

גם באביב אתחול 1, מאגר החיבורים המוגדר כברירת מחדל היה טומקטאבל עם Spring Boot 2 הוא שונה ל- HikariCP.

תוכל למצוא דוגמאות נוספות להגדרת תצורה של JPA ב- Spring Boot בפרויקט GitHub.

כפי שאנו רואים, תצורת ה- JPA הבסיסית היא פשוטה למדי אם אנו משתמשים באביב אתחול.

למרות זאת, אם יש לנו פרויקט אביב סטנדרטי, אנו זקוקים לתצורה מפורשת יותר, באמצעות Java או XML. על זה נתמקד בחלקים הבאים.

3. תצורת האביב של JPA עם Java - בפרויקט שאינו אתחול

כדי להשתמש ב- JPA בפרויקט אביב, אנחנו צריכים להקים את EntityManager.

זהו החלק העיקרי בתצורה ואנחנו יכולים לעשות זאת באמצעות שעועית מפעל אביב. זה יכול להיות פשוט יותר LocalEntityManagerFactoryBean אוֹ יותר גמיש LocalContainerEntityManagerFactoryBean.

בואו נראה כיצד נוכל להשתמש באפשרות השנייה:

@Configuration @EnableTransactionManagement class class PersistenceJPAConfig {@Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory () {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean (); em.setDataSource (dataSource ()); em.setPackagesToScan (מחרוזת חדשה [] {"com.baeldung.persistence.model"}); JpaVendorAdapter vendorAdapter = HibernateJpaVendorAdapter חדש); em.setJpaVendorAdapter (vendorAdapter); em.setJpaProperties (additionalProperties ()); להחזיר אותם; } // ...}

עלינו גם להגדיר במפורש את מקור מידע אפונה השתמשנו לעיל:

@Bean DataSource ציבורי DataSource () {DriverManagerDataSource dataSource = חדש DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / spring_jpa"); dataSource.setUsername ("הדרכה משתמש"); dataSource.setPassword ("tutorialmy5ql"); להחזיר dataSource; }

החלק הסופי של התצורה הם המאפיינים הנוספים של מצב שינה TransactionManager ו חריג תרגום שעועית:

@Bean פלטפורמת פלטפורמה טראנסקציה מינה () TransManager () {JpaTransactionManager transactionManager = JpaTransactionManager חדש (); transactionManager.setEntityManagerFactory (entityManagerFactory (). getObject ()); TransactionManager החזר; } @Bean PersistenceExceptionTranslationPostProcessor exceptionTranslation () {להחזיר PersistenceExceptionTranslationPostProcessor חדש (); } מאפיינים additionalProperties () {מאפייני מאפיינים = מאפיינים חדשים (); properties.setProperty ("hibernate.hbm2ddl.auto", "create-drop"); properties.setProperty ("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); נכסי החזרה; }

4. תצורת האביב של JPA עם XML

לאחר מכן, בוא נראה את אותה תצורת אביב עם XML:

        צור ושחרר org.hibernate.dialect.MySQL5Dialect 

יש הבדל קטן יחסית בין ה- XML ​​לבין התצורה החדשה מבוססת Java. כלומר ב- XML, התייחסות לשעועית אחרת יכולה להצביע על שעועית או מפעל שעועית עבור אותה שעועית.

ב- Java, לעומת זאת, מכיוון שהסוגים שונים, המהדר אינו מאפשר זאת, וכך גם ה- EntityManagerFactory נשלף תחילה ממפעל השעועית שלה ואז מועבר למנהל העסקאות:

transactionManager.setEntityManagerFactory (entityManagerFactory (). getObject ());

5. הולך ללא XML מלא

בדרך כלל, JPA מגדיר יחידת התמדה באמצעות ה- META-INF / persistence.xml קוֹבֶץ. החל באביב 3.1, התמדה.קסמל כבר לא נחוץ. ה LocalContainerEntityManagerFactoryBean תומך כעת ב- חבילות ToScan מאפיין שבו החבילות לסריקה @יֵשׁוּת ניתן לציין שיעורים.

קובץ זה היה החלק האחרון ב- XML ​​שעלינו להסיר. כעת אנו יכולים להגדיר JPA באופן מלא ללא XML.

בדרך כלל היינו מציינים מאפייני JPA ב התמדה.קסמל קוֹבֶץ. לחלופין, אנו יכולים להוסיף את המאפיינים ישירות לשעועית המפעל של מנהל הישויות:

factoryBean.setJpaProperties (this.additionalProperties ());

כהערה צדדית, אם מצב שינה הוא ספק ההתמדה, זו תהיה הדרך לציין גם מאפיינים ספציפיים למצב שינה.

6. תצורת Maven

בנוסף לליבות האביב ותלות ההתמדה - להראות בפירוט במדריך Spring with Maven - עלינו גם להגדיר JPA ו- Hibernate בפרויקט, כמו גם מחבר MySQL:

 org.hibernate hibernate-core 5.2.17. זמן ריצה סופי mysql mysql-connector-java 8.0.19 זמן ריצה 

שים לב שתלות MySQL כלולה כאן כדוגמה. אנחנו צריכים מנהל התקן כדי להגדיר את מקור הנתונים, אבל כל מסד נתונים הנתמך על ידי שינה.

7. מסקנה

מדריך זה המחיש כיצד להגדיר JPA עם תרדמת שינה באביב גם במגף אביב וגם ביישום אביב סטנדרטי.

כמו תמיד, הקוד המוצג במאמר זה זמין באתר GitHub.