שילוב מגף קפיץ עם HSQLDB
1. סקירה כללית
Spring Boot מקל מאוד על עבודה עם מערכות מסדי נתונים שונות, ללא הטרחה של ניהול תלות ידני.
באופן ספציפי יותר, Starter של Spring Data JPA מספק את כל הפונקציונליות הנדרשת לשילוב חלק עם כמה מקור מידע יישומים. במדריך זה, נלמד כיצד לשלב את Spring Boot עם HSQLDB. כדי להדגים כמה קל לשלב את האביב עם HSQLDB, ניצור שכבת מאגר JPA פשוטה המבצעת פעולות CRUD בגופי לקוחות באמצעות מסד נתונים HSQLDB בזכרון.. הנה המתנע של Spring Boot בו נשתמש להפעלת שכבת מאגר המדגמים שלנו: שים לב שהכללנו גם את התלות ב- HSQLDB. בלעדיו, Spring Boot ינסה להגדיר אוטומטית את מקור מידע שעועית ובריכת חיבורים JDBC עבורנו דרך HikariCP. כתוצאה מכך, אם לא נציין חוקי מקור מידע תלות שלנו pom.xml קובץ, נקבל כשל בבנייה. בנוסף, בואו נדאג לבדוק את הגרסה האחרונה של spring-boot-starter-data-jpa במרכז מייבן. לצורך מימוש שכבת מאגר ההדגמה שלנו, נשתמש במסד נתונים בזיכרון. עם זאת, ניתן לעבוד גם עם מאגרי מידע מבוססי קבצים. נחקור כל אחת משיטות אלה בסעיפים שלמטה. בואו נסתכל כיצד להפעיל שרת HSQLDB חיצוני וליצור מסד נתונים מבוסס קבצים. התקנת HSQLDB והפעלת השרת היא פשוטה, באופן כללי. להלן השלבים שעלינו לבצע: לאחר הגדרת מסד הנתונים, עלינו ליצור חיבור אליו. כדי לעשות זאת ב- Windowsבוא נעבור למסד הנתונים פַּח התיקיה והפעל את runManagerSwing.bat קוֹבֶץ. פעולה זו תפתח את המסך הראשוני של מנהל מסדי הנתונים של HSQLDB, שם נוכל להזין את אישורי החיבור: בלינוקס / יוניקס / מק, אנו יכולים להשתמש ב- NetBeans, Eclipse או IntelliJ IDEA כדי ליצור את חיבור מסד הנתונים באמצעות הכלים הוויזואליים של IDE, תוך שימוש באותם אישורים. בכל אחד מהכלים הללו, פשוט ליצור טבלת מסדי נתונים על ידי ביצוע סקריפט SQL במנהל מסד הנתונים או בתוך ה- IDE. לאחר חיבורנו, אנו יכולים ליצור לקוחות שולחן: בכמה צעדים פשוטים יצרנו מסד נתונים מבוסס קבצים HSQLDB המכיל לקוחות שולחן. אם ברצוננו להתחבר למסד הנתונים מבוסס הקבצים הקודם מ- Spring Boot, להלן ההגדרות שעלינו לכלול ב- application.properties קוֹבֶץ: לחלופין, אם אנו משתמשים בבסיס נתונים בזיכרון, עלינו להשתמש באלה: שימו לב ל DB_CLOSE_DELAY = -1 הפרמטר צורף בסוף כתובת ה- URL של מסד הנתונים. כשעובדים עם מסד נתונים בזיכרון, עלינו לציין זאת, לכן יישום ה- JPA, שהוא מצב שינה, לא יסגור את מסד הנתונים בזמן שהיישום פועל. עם הגדרות חיבור מסד הנתונים כבר מוגדרות, הבא עלינו להגדיר את שלנו צרכן יֵשׁוּת: בנוסף, עלינו ליישם שכבת התמדה דקה, המאפשרת לנו פונקציונליות בסיסית של CRUD צרכן גופי JPA. אנו יכולים ליישם שכבה זו בקלות על ידי הרחבת ה- מאגר Crud מִמְשָׁק: לבסוף, עלינו לוודא כי Spring Boot יכול להתחבר למעשה ל- HSQLDB. אנו יכולים להשיג זאת בקלות על ידי בדיקת שכבת המאגר בלבד. נתחיל לבדוק את המאגר findById () ו מצא הכל() שיטות: לבסוף, בואו נבדוק את לשמור() שיטה: במאמר זה, למדנו כיצד לשלב את האביב עם HSQLDB, וכיצד להשתמש במסד נתונים מבוסס קבצים או בזיכרון בפיתוח שכבת מאגר JPA בסיסית. כרגיל, כל דגימות הקוד המוצגות במאמר זה זמינות ב- GitHub.2. התלות של Maven
org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE org.hsqldb hsqldb 2.4.0 runtime
3. חיבור למסד HSQLDB
3.1. הפעלת שרת HSQLDB חיצוני
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
צור לקוחות שולחן (id INT לא NULL, שם VARCHAR (45), דוא"ל VARCHAR (45), מפתח ראשוני (ID));
3.2. ה application.properties קוֹבֶץ
spring.datasource.driver-class-name = org.hsqldb.jdbc.JDBCDriver spring.datasource.url = jdbc: hsqldb: hsql: // localhost / testdb spring.datasource.username = sa spring.datasource.password = spring.jpa .hibernate.ddl-auto = עדכון
spring.datasource.driver-class-name = org.hsqldb.jdbc.JDBCDriver spring.datasource.url = jdbc: hsqldb: mem: testdb; DB_CLOSE_DELAY = -1 spring.datasource.username = sa spring.datasource.password = spring. jpa.hibernate.ddl-auto = צור
4. ה צרכן יֵשׁוּת
@Entity @Table (שם = "לקוחות") לקוח ציבורי {@Id @GeneratedValue (אסטרטגיה = GenerationType.AUTO) מזהה ארוך פרטי; שם מחרוזת פרטי; דוא"ל מחרוזת פרטי; // קונסטרוקטורים סטנדרטיים / סטרים / getters / toString}
5. ה צרכן מאגר
ממשק ציבורי @Repository CustomerRepository מרחיב את CrudRepository {}
6. בדיקת ה- צרכן מאגר
@RunWith (SpringRunner.class) @SpringBootTest מחלקה ציבורית CustomerRepositoryTest {@ CustomerRepository CustomerRepository פרטי; @ מבחן פומבי בטל כאשר FindingCustomerById_thenCorrect () {customerRepository.save (לקוח חדש ("ג'ון", "[דוא"ל מוגן]")); assertThat (customerRepository.findById (1L)). isInstanceOf (Optional.class); } @Test ציבורי בטל whenFindingAllCustomers_thenCorrect () {customerRepository.save (לקוח חדש ("ג'ון", "[דוא"ל מוגן]")); customerRepository.save (לקוח חדש ("ג'ולי", "[דוא"ל מוגן]")); assertThat (customerRepository.findAll ()). isInstanceOf (List.class); }}
@ מבחן ציבורי בטל כאשרSavingCustomer_thenCorrect () {customerRepository.save (לקוח חדש ("בוב", "[מוגן באמצעות דוא"ל))); לקוח לקוח = customerRepository.findById (1L) .orElseGet (() -> לקוח חדש ("john", "[email protected]")); assertThat (customer.getName ()). isEqualTo ("בוב"); }
7. מסקנה