מדריך מהיר לטעינת נתונים ראשוניים עם אתחול האביב

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

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

אך לפעמים נצטרך שליטה דקה יותר על שינויי מסד הנתונים. אז נוכל להשתמש ב- data.sql ו schema.sql קבצים באביב.

2. ה data.sql קוֹבֶץ

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

@Entity מחלקה ציבורית מדינה {@Id @GeneratedValue (אסטרטגיה = IDENTITY) מזהה שלם פרטי פרטי; @Column (nullable = false) שם מחרוזת פרטי; // ...}

אם אנו מריצים את היישום שלנו, Spring Boot ייצור עבורנו טבלה ריקה, אך לא יאכלס אותה בשום דבר.

דרך קלה לעשות זאת היא ליצור קובץ בשם data.sql:

הכנס למדינה (שם) ערכים ('הודו'); הכנס למדינה (שם) ערכים ('ברזיל'); הכנס למדינה (שם) ערכים ('ארה"ב'); הכנס למדינה (שם) ערכים ('איטליה');

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

3. ה schema.sql קוֹבֶץ

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

צור מדינה בטבלה (מזהה INTEGER לא NULL AUTO_INCREMENT, שם VARCHAR (128) לא NULL, מפתח ראשי (id));

אביב ירים את הקובץ הזה וישתמש בו ליצירת סכמה.

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

spring.jpa.hibernate.ddl-auto = אין

4. שליטה ביצירת מסדי נתונים באמצעות שינה

האביב מספק ספציפית ל- JPA מאפיין שמשנה שינה משתמש בו לייצור DDL: spring.jpa.hibernate.ddl-auto.

ערכי המאפיינים הסטנדרטיים של מצב שינה הם: לִיצוֹר, עדכון, ליצור-ירידה, לְאַמֵת ו אף אחד:

  • לִיצוֹר - מצב שינה קודם מפיל טבלאות קיימות ואז יוצר טבלאות חדשות
  • עדכון - מודל האובייקט שנוצר על בסיס המיפויים (הערות או XML) מושווה לסכמה הקיימת, ואז מצב שינה מעדכן את הסכימה בהתאם להבדל. זה אף פעם לא מוחק את הטבלאות או העמודות הקיימות, גם אם היישום לא מחייב אותן יותר
  • ליצור-ירידה - דומה ל לִיצוֹר, בתוספת ש- Hibernate יפיל את מסד הנתונים לאחר סיום כל הפעולות. משמש בדרך כלל לבדיקת יחידות
  • לְאַמֵת - מצב שינה מאמת רק אם הטבלאות והעמודות קיימות, אחרת היא יוצרת חריג
  • אף אחד - ערך זה מכבה למעשה את דור ה- DDL

קפיץ אתחול ברירת המחדל היא ערך פרמטר זה ל ליצור-ירידה אם לא אותר מנהל סכמות, אחרת אף אחד לכל המקרים האחרים.

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

5. @Sql

האביב מספק גם את @Sql ביאור - דרך הצהרתית לאתחל ולאכלס את סכימת הבדיקה שלנו.

בואו נראה כיצד להשתמש ב- @Sql ביאור ליצירת טבלה חדשה וגם לטעון את הטבלה עם נתונים ראשוניים לבדיקת האינטגרציה שלנו:

@Sql ({"/ workers_schema.sql", "/import_employees.sql"}) מעמד ציבורי SpringBootInitialLoadIntegrationTest {@ עובד עובד במאגר פרטי פרטי מאושר; @Test הריקני מבחן testLoadDataForTestClass () {assertEquals (3, employeeRepository.findAll (). Size ()); }}

התכונות של @Sql ביאור הם:

  • תצורה - תצורה מקומית עבור סקריפטים SQL. אנו מתארים זאת בפירוט בסעיף הבא
  • שלב שלב - אנו יכולים גם לציין מתי לבצע את הסקריפטים BEFORE_TEST_METHOD אוֹ AFTER_TEST_METHOD
  • הצהרות - אנו יכולים להכריז על ביצוע הצהרות SQL מוטבעות
  • סקריפטים - אנו יכולים להכריז על ביצוע הנתיבים לקבצי סקריפט SQL. זהו כינוי עבור ערך תְכוּנָה

ה @Sql ביאור ניתן להשתמש ברמת הכיתה או ברמת השיטה. אנו יכולים לטעון נתונים נוספים הנדרשים עבור מקרה מבחן מסוים על ידי הערת שיטה זו:

@Test @Sql ({"/ import_senior_employees.sql"}) test void testLoadDataForTestCase () {assertEquals (5, employeeRepository.findAll (). Size ()); }
6. @SqlConfig

אנחנו יכולים להגדיר את האופן בו אנו מנתחים ומריצים את סקריפטים SQL באמצעות @SqlConfig ביאור.

@SqlConfig ניתן להכריז ברמת הכיתה, שם הוא משמש כתצורה גלובלית. או שניתן להשתמש בו להגדרת תצורה מסוימת @Sql ביאור.

בואו נראה דוגמה שבה אנו מציינים את קידוד סקריפטי ה- SQL שלנו וכן את מצב העסקה לביצוע הסקריפטים:

@Test @Sql (scripts = {"/import_senior_employees.sql"}, config = @SqlConfig (קידוד = "utf-8", transactionMode = TransactionMode.ISOLATED)) test public testLoadDataForTestCase () {assertEquals (5, workerRepory) ).גודל()); }

ובואו נסתכל על התכונות השונות של @SqlConfig:

  • blockCommentStartDelimiter - מפריד לזיהוי תחילת הערות החסימה בקבצי סקריפט SQL
  • blockCommentEndDelimiter - מפריד לציון סוף הערות החסימה בקבצי סקריפט SQL
  • commentPrefix - קידומת לזיהוי הערות בשורה אחת בקבצי סקריפט SQL
  • מקור מידע - שם ה- javax.sql.DataSource שעועית שכנגדה יופעלו התסריטים וההצהרות
  • הַצפָּנָה קידוד עבור קבצי סקריפט SQL, ברירת המחדל היא קידוד פלטפורמה
  • errorMode - מצב שישמש כאשר תיתקל בשגיאה בהפעלת הסקריפטים
  • מפריד - מחרוזת המשמשת להפרדת הצהרות בודדות, ברירת המחדל היא "-"
  • transactionManager - שם שעועית של PlatformTransactionManager שישמשו לעסקאות
  • transactionMode - המצב שישמש בעת ביצוע סקריפטים בעסקה

7. @SqlGroup

Java 8 ומעלה מאפשרים להשתמש בהערות חוזרות ונשנות. ניתן להשתמש בתכונה זו עבור @Sql ביאורים גם כן. עבור Java 7 ומטה, יש הערת מכולה - @SqlGroup. משתמש ב @SqlGroup ביאור, אנו יכולים להכריז על מספר רב @Sql ביאורים:

@SqlGroup ({@Sql (scripts = "/employees_schema.sql", config = @SqlConfig (transactionMode = TransactionMode.ISOLATED)), @Sql ("/ import_employees.sql")}) מחלקה ציבורית SpringBootSqlGroupAnnotationIntegration ; @Test הריקני מבחן @ TestLoadDataForTestCase () {assertEquals (3, employeeRepository.findAll (). Size ()); }}

8. מסקנה

במאמר מהיר זה ראינו כיצד אנו יכולים למנף schema.sql ו data.sql קבצים להגדרת סכימה ראשונית ואכלוס נתונים. ראינו גם כיצד נוכל להשתמש @Sql, @SqlConfig, ו @SqlGroup הערות לטעינת נתוני בדיקה לבדיקות.

יש לזכור כי גישה זו מתאימה יותר לתרחישים בסיסיים ופשוטים, כל טיפול מתקדם בבסיסי נתונים ידרוש כלים מתקדמים ומעודנים יותר כמו Liquibase או Flyway.

קטעי קוד, כמו תמיד, ניתן למצוא באתר GitHub.


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