מגף אביב עם SQLite

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

במדריך מהיר זה, נעבור צעדים לשימוש במסד נתונים של SQLite ביישום Spring Boot המותאם ל- JPA.

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

בואו נסתכל על מה שנדרש.

2. הגדרת פרויקט

להמחשה שלנו, נתחיל עם אפליקציית Spring Data Rest שהשתמשנו בה בהדרכות קודמות.

ב- pom, עלינו להוסיף את ה- sqllite-jdbc תלות:

 org.xerial sqlite-jdbc 3.25.2 

תלות זו נותנת לנו את מה שאנחנו צריכים כדי להשתמש ב- JDBC כדי לתקשר עם SQLite. אבל, אם נשתמש ב- ORM, זה לא מספיק.

3. שיח SQLite

לִרְאוֹת, מצב שינה אינו נשלח עם נִיב עבור SQLite. עלינו ליצור אחד בעצמנו.

3.1. מַאֲרִיך נִיב

הצעד הראשון שלנו הוא להאריך org.hibernate.dialect.Dialect בכיתה לרישום סוגי הנתונים המסופקים על ידי SQLite:

מחלקה ציבורית SQLiteDialect מרחיבה את הדיאלקט {public SQLiteDialect () {registerColumnType (Types.BIT, "מספר שלם"); registerColumnType (Types.TINYINT, "tinyint"); registerColumnType (Types.SMALLINT, "smallint"); registerColumnType (Types.INTEGER, "מספר שלם"); // סוגי נתונים אחרים}}

יש כמה, אז בהחלט לבדוק את קוד הדוגמה לכל השאר.

לאחר מכן נצטרך לעקוף ברירת מחדל כלשהי נִיב התנהגויות.

3.2. תמיכה בעמודות זהות

לדוגמה, עלינו לספר את מצב שינה "כיצד SQLite מטפל @תְעוּדַת זֶהוּת עמודות, שאנו יכולים לעשות עם מנהג IdentityColumnSupport יישום:

מחלקה ציבורית SQLiteIdentityColumnSupport מרחיב את IdentityColumnSupportImpl {@Override תומך בוליאני ציבוריIdentityColumns () {return true; } @Override ציבורי מחרוזת getIdentitySelectString (טבלת מחרוזת, עמודה מחרוזת, סוג int) זורק MappingException {return "בחר last_insert_rowid ()"; } @Override ציבורי מחרוזת getIdentityColumnString (int סוג) זורק MappingException {להחזיר "מספר שלם"; }}

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

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

@ עקוב על IdentityColumnSupport ציבורי getIdentityColumnSupport () {החזר SQLiteIdentityColumnSupport חדש (); }

3.3. השבת טיפול באילוצים

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

@Override בוליאני ציבורי hasAlterTable () {return false; } @ עקוף בוליאני ציבורי dropConstraints () {return false; } @ מחרוזות ציבוריות @Override getDropForeignKeyString () {return ""; } @ מיקום מחרוזת ציבורית getAddForeignKeyConstraintString (String cn, String [] fk, String t, String [] pk, boolean rpk) {return ""; } @ מיקום מחרוזת ציבורית getAddPrimaryKeyConstraintString (String constraintName) {return ""; }

ובתוך רגע בלבד נוכל להתייחס לניב חדש זה בתצורת Boot Boot שלנו.

4. מקור מידע תְצוּרָה

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

@ אווירה סביבתית אוטומטית; @Bean DataSource הציבורי dataSource () {final DriverManagerDataSource dataSource = חדש DriverManagerDataSource (); dataSource.setDriverClassName (env.getProperty ("driverClassName")); dataSource.setUrl (env.getProperty ("url")); dataSource.setUsername (env.getProperty ("משתמש")); dataSource.setPassword (env.getProperty ("סיסמה")); להחזיר dataSource; }

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

driverClassName = org.sqlite.JDBC url = jdbc: sqlite: זיכרון: myDb? cache = שם משתמש משותף = sa סיסמה = sa hibernate.dialect = com.baeldung.dialect.SQLiteDialect hibernate.hbm2ddl.auto = create-drop hibernate.show_sql = נָכוֹן

שים לב שעלינו לשמור את המטמון כ- מְשׁוּתָף על מנת לשמור על עדכוני מסד הנתונים גלויים במספר חיבורי מסדי נתונים.

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

5. מסקנה

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

הקפד לבדוק את היישום ב- Github. פשוט לרוץ עם mvn -Dspring.profiles.active = sqlite spring-boot: run ועיין ב // localhost: 8080.


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