מדריך Ebean ORM

1. הקדמה

Ebean הוא כלי מיפוי התייחסותי לאובייקטים שנכתב בג'אווה.

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

חוץ מזה, זה מגיע גם עם API של שאילתות ותומך בכתיבת שאילתות ב- SQL מקורי. Ebean תומכת בכל ספקי מסדי הנתונים העיקריים כגון Oracle, Postgres, MySql, H2 וכו '.

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

2. התקנה

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

2.1. תלות Maven

לפני שנתחיל, בואו נייבא את התלות הנדרשת:

 io.ebean ebean 11.22.4 com.h2database h2 1.4.196 ch.qos.logback logback-classic 1.2.3 

הגרסאות האחרונות של Ebean, H2 ו- Logback ניתן למצוא ב- Maven Central.

2.2. שיפורים

Ebean צריכה לשנות שעועית ישויות כך שניתן יהיה לנהל אותן על ידי השרת. לפיכך, נוסיף תוסף Maven כדי לבצע את העבודה הזו:

 io.ebean ebean-maven-plugin 11.11.2 ניפוי בכיתות תהליכים עיקריות = 1 שיפור 

כמו כן, עלינו לספק לתוסף Maven את שמות החבילות המכילות את הגופים והמחלקות המשתמשים בעסקאות. לשם כך אנו יוצרים את הקובץ ebean.mf:

חבילות ישות: com.baeldung.ebean.model חבילות עסקאות: com.baeldung.ebean.app

2.3. רישום

בואו גם ניצור logback.xml והגדר רמות רישום בכמה חבילות ל- זֵכֶר כדי שנוכל לראות את ההצהרות שמתבצעות:

3. קביעת תצורה של שרת

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

3.1. באמצעות קובץ מאפייני ברירת מחדל

קובץ המאפיינים המוגדר כברירת מחדל יכול להיות מסוג נכסים אוֹ יאמל. Ebean תחפש תצורה בקבצים עם שמות application.properties, ebean.properties אוֹ application.yml.

מלבד מסירת פרטי חיבור מסד הנתונים, אנו יכולים גם להורות ל- Ebean ליצור ולהפעיל הצהרות DDL.

עכשיו, בואו נסתכל על תצורה לדוגמה:

ebean.db.ddl.generate = נכון ebean.db.ddl.run = מקור נתונים אמיתי.db.username = sa datasource.db.password = datasource.db.databaseUrl = jdbc: h2: mem: source datasource.db.databaseDriver = org.h2. נהג

3.2. באמצעות ServerConfig

לאחר מכן, בואו נסתכל כיצד נוכל ליצור את אותו שרת באמצעות תכנות EbeanServerFactory ו ServerConfig:

ServerConfig cfg = ServerConfig חדש (); מאפייני מאפיינים = מאפיינים חדשים (); properties.put ("ebean.db.ddl.generate", "true"); properties.put ("ebean.db.ddl.run", "true"); properties.put ("datasource.db.username", "sa"); Properties.put ("datasource.db.password", ""); properties.put ("datasource.db.databaseUrl", "jdbc: h2: mem: app2"; properties.put ("datasource.db.databaseDriver", "org.h2.Driver"); cfg.loadFromProperties (מאפיינים); שרת EbeanServer = EbeanServerFactory.create (cfg);

3.3. מופע ברירת מחדל לשרת

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

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

שרת EbeanServer = Ebean.getDefaultServer ();

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

cfg.setDefaultServer (נכון);

4. יצירת ישויות

Ebean מספקת תמיכה מלאה בהערות JPA וכן בתכונות נוספות באמצעות הערות משלה.

בואו ניצור כמה ישויות המשתמשות בהערות JPA וגם ב- Ebean. ראשית, ניצור BaseModel המכיל מאפיינים הנפוצים בין ישויות:

@MappedSuperclass מעמד מופשט ציבורי BaseModel {@ Id מוגן מזהה ארוך; גרסה ארוכה מוגנת @ Version; מיידית @WhenCreated מוגן createdOn; @WhenModified מוגן מיידי modifiedOn; // גטרים וקובעים}

הנה, השתמשנו ב- MappedSuperClass ביאור JPA להגדרת ה- BaseModel. ושתי ביאורים של Ebean io.ebean.annotation.WhenCreated ו io.ebean.annotation.WhenModified למטרות ביקורת.

לאחר מכן, ניצור שתי ישויות צרכן ו כתובת אשר מאריכים BaseModel:

הלקוח במחלקה ציבורית @Entity מרחיב את BaseModel {לקוח ציבורי (שם מחרוזת, כתובת כתובת) {super (); this.name = שם; כתובת זו: כתובת; } שם מחרוזת פרטי; @OneToOne (מפל = CascadeType.ALL) כתובת כתובת; // גטרים וקובעים} 
@ Class בכיתה ציבורית כתובת מרחיב את BaseModel {כתובת ציבורית (כתובת מחרוזת שורה 1, כתובת מחרוזת שורה 2, מחרוזת עיר) {סופר (); this.addressLine1 = addressLine1; this.addressLine2 = addressLine2; this.city = עיר; } כתובת מחרוזת פרטיתLine1; כתובת מחרוזת פרטית Line2; עיר מיתרים פרטית; // גטרים וקובעים}

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

5. פעולות בסיסיות של CRUD

מוקדם יותר ראינו כיצד להגדיר את EbeanServer ויצר שתי ישויות. עַכשָׁיו, בואו נבצע כמה פעולות CRUD בסיסיות עליהם.

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

כתובת a1 = כתובת חדשה ("5, רחוב רחב", null, "ניו יורק"); לקוח c1 = לקוח חדש ("ג'ון רחב", a1); שרת EbeanServer = Ebean.getDefaultServer (); server.save (c1); c1.setName ("ג'יין רחב"); c1.setAddress (null); server.save (c1); לקוח נמצא C1 = Ebean.find (Customer.class, c1.getId ()); Ebean.delete (נמצא C1);

ראשית, אנו יוצרים a צרכן השתמשו במופע שרת ברירת המחדל כדי לשמור אותו באמצעות לשמור().

לאחר מכן אנו מעדכנים את פרטי הלקוח ושומרים אותם שוב באמצעות לשמור().

לבסוף, אנו משתמשים בשיטה הסטטית למצוא() עַל Ebean להביא את הלקוח ולמחוק אותו באמצעות לִמְחוֹק().

6. שאילתות

ניתן להשתמש בממשקי API של שאילתות גם ליצירת גרף אובייקטים עם פילטרים ופרדיקטים. אנחנו יכולים להשתמש Ebean אוֹ EbeanServer ליצור וביצוע שאילתות.

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

לקוח לקוח = Ebean.find (Customer.class). בחר ("name") .fetch ("address", "city") .where () .eq ("city", "San Jose") .findOne ();

הנה, עם למצוא() אנו מציינים שאנחנו רוצים למצוא ישויות מסוג צרכן. לאחר מכן, אנו משתמשים בחר() כדי לציין את המאפיינים שיש לאכלס ב צרכן לְהִתְנַגֵד.

מאוחר יותר, אנו משתמשים לְהָבִיא() כדי לציין שאנחנו רוצים להביא את כתובת אובייקט השייך ל צרכן ושאנחנו רוצים להביא את עִיר שדה.

לבסוף, אנו מוסיפים פרדיקט ומגבילים את גודל התוצאה ל -1.

7. עסקאות

Ebean מבצעת כל הצהרה או שאילתה בעסקה חדשה כברירת מחדל.

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

במקרים כאלה, אם אנו מציינים את השיטה באמצעות io.ebean.annotations.Transactional, כל ההצהרות בשיטה יבוצעו באותה עסקה:

@Transactional ציבור סטטי ריק ריקAndDeleteInsideTransaction () {לקוח c1 = getCustomer (); שרת EbeanServer = Ebean.getDefaultServer (); server.save (c1); לקוח מצא C1 = server.find (Customer.class, c1.getId ()); server.delete (נמצא C1); }

8. בניית הפרויקט

לבסוף, אנו יכולים לבנות את פרויקט Maven באמצעות הפקודה:

הידור io.ebean: ebean-maven-plugin: שפר

9. מסקנה

לסיכום, בדקנו את התכונות הבסיסיות של Ebean שניתן להשתמש בהן כדי להתמיד ולשאול על ישויות במסד נתונים יחסי.

לבסוף, קוד זה זמין ב- Github.


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