מדריך מהיר ל- MyBatis

1. הקדמה

MyBatis היא מסגרת התמדה של קוד פתוח שמפשטת את הטמעת הגישה למסדי נתונים ביישומי Java. הוא מספק תמיכה ב- SQL מותאם אישית, נהלים מאוחסנים וסוגים שונים של קשרי מיפוי.

במילים פשוטות, זו אלטרנטיבה ל- JDBC ול- Hibernate.

2. תלות Maven

כדי להשתמש ב- MyBatis עלינו להוסיף את התלות שלנו pom.xml:

 org.mybatis mybatis 3.4.4 

הגרסה האחרונה של התלות נמצאת כאן.

3. ממשקי API של Java

3.1. SQLSessionFactory

SQLSessionFactory הוא מחלקת הליבה עבור כל יישום MyBatis. מחלקה זו מופעלת באמצעות SQLSessionFactoryBuilder 'ס בּוֹנֶה() שיטה הטוענת קובץ XML תצורה:

משאב מחרוזת = "mybatis-config.xml"; InputStream inputStream Resources.getResourceAsStream (משאב); SQLSessionFactory sqlSessionFactory = חדש SqlSessionFactoryBuilder (). Build (inputStream);

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

ציבורי סטטי ציבורי SqlSessionFactory buildqlSessionFactory () {DataSource dataSource = חדש PooledDataSource (DRIVER, URL, USERNAME, PASSWORD); סביבת סביבה = סביבה חדשה ("פיתוח", JdbcTransactionFactory חדש (), dataSource); תצורת תצורה = תצורה חדשה (סביבה); configuration.addMapper (PersonMapper.class); // ... SqlSessionFactoryBuilder בונה = SqlSessionFactoryBuilder חדש (); החזר builder.build (תצורה); }

3.2. SQLSession

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

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

נסה (SqlSession session = sqlSessionFactory.openSession ()) {// לעשות עבודה}

4. מפות

Mappers הם ממשקי Java הממפים שיטות להצהרות SQL המתאימות. MyBatis מספק הערות להגדרת פעולות בסיס נתונים:

ממשק ציבורי PersonMapper {@Insert ("הכנס לערכי אדם (שם) (# {name})") שמירה שלמה ציבורית (אדם); // ... @ בחר ("בחר personId, שם מאדם שבו personId = # {personId}") @Results (value = {@Result (property = "personId", column = "personId"), @Result (property = "שם", עמודה = "שם"), @Result (מאפיין = "כתובות", javaType = List.class, עמודה = "personId", [דוא"ל מוגן] (select = "getAddresses"))}} אדם ציבורי getPersonById (אישיות שלמה); // ...}

5. ביאורים של MyBatis

בואו נראה כמה מההערות העיקריות שמספק MyBatis:

  • @ הכנס, @ בחר, @ עדכן, @ מחקההערות הללו מייצגות הצהרות SQL שיש לבצע על ידי קריאה לשיטות המסומנות:
    @Insert ("הכנס לערכי אדם (שם) (# {name})") שמור שלם ציבורי (אדם); @Update ("עדכן שם סט של אדם = # {name} כאשר personId = # {personId}") update public public spacePerson (אדם זה); @Delete ("מחק מאדם שבו personId = # {personId}") בטל ציבורי deletePersonById (personId שלם); @Select ("בחר person.personId, person.name מאדם WHERE person.personId = # {personId}") אדם getPerson (personId שלם);
  • @תוצאות - זוהי רשימה של מיפויי תוצאות המכילים את הפרטים של אופן מיפוי עמודות מסד הנתונים לתכונות מחלקה Java:
    @Select ("בחר personId, שם מאדם שבו personId = # {personId}") @Results (value = {@Result (property = "personId", column = "personId") // ...}) אדם ציבורי getPersonById (אישיות שלמה);
  • @תוֹצָאָה - זה מייצג מופע יחיד של תוֹצָאָה מתוך רשימת התוצאות שאוחזרה מ @תוצאות. הוא כולל את הפרטים כמו מיפוי מעמוד מסד נתונים למאפיין שעועית Java, סוג Java של המאפיין וגם השיוך עם אובייקטים אחרים של Java:
    @Results (value = {@Result (property = "personId", column = "personId"), @Result (property = "name", column = "name"), @Result (property = "addresses", javaType = List .class) // ...}) אדם ציבורי getPersonById (personId Integer);
  • @רבהוא מציין מיפוי של אובייקט אחד לאוסף של האובייקטים האחרים:
    @ תוצאות (value = {@Result (property = "addresses", javaType = List.class, column = "personId", [email protected] (select = "getAddresses"))})

    פה getAddresses היא השיטה המחזירה את האוסף של כתובת על ידי שאילתת טבלת כתובת.

    @Select ("בחר addressId, streetAddress, personId מכתובת שבה personId = # {personId}") כתובת ציבורית getAddresses (PersonId שלם);

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

  • @ MapKeyזה משמש להמרת רשימת הרשומות ל- מַפָּה של רשומות עם המפתח כפי שהוגדר על ידי ערך תְכוּנָה:
    @ בחר ("בחר * מאדם") @ MapKey ("personId") מפה getAllPerson ();
  • @אפשרויותביאור זה מציין מגוון רחב של מתגים ותצורה שיוגדרו כך שבמקום להגדיר אותם בהצהרות אחרות נוכל @אפשרויות כדי להגדיר אותם:
    @Insert ("הכנס לכתובת (streetAddress, personId) ערכים (# {streetAddress}, # {personId})") @Options (useGeneratedKeys = false, flushCache = true) ציבור שלם saveAddress (כתובת כתובת);

6. SQL דינמי

SQL דינמי הוא תכונה חזקה מאוד המסופקת על ידי MyBatis. בעזרת זה אנו יכולים לבנות את ה- SQL המורכב שלנו בדיוק.

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

בואו לחקור כיצד אנו יכולים להשתמש ב- SQL דינמי ביישום שלנו:

@SelectProvider (type = MyBatisUtil.class, method = "getPersonByName") אדם ציבורי getPersonByName (שם מחרוזת);

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

מחלקה ציבורית MyBatisUtil {// ... public String getPersonByName (שם מחרוזת) {להחזיר SQL חדש () {{SELECT ("*"); FROM ("אדם"); WHERE ("שם כמו # {name} || '%'"); }}. toString (); }}

SQL דינמי מספק את כל מבני ה- SQL כמחלקה למשל. בחר, איפה וכו 'עם זה, אנו יכולים לשנות באופן דינמי את הדור של איפה סָעִיף.

7. תמיכת נוהל מאוחסן

אנו יכולים גם לבצע את ההליך המאוחסן באמצעות @בחר ביאור. כאן עלינו להעביר את שם ההליך המאוחסן, את רשימת הפרמטרים ולהשתמש במפורש שִׂיחָה להליך זה:

@Select (value = "{CALL getPersonByProc (# {personId, mode = IN, jdbcType = INTEGER})}") @Options (statementType = StatementType.CALLABLE) אדם ציבורי getPersonByProc (PersonId שלם);

8. מסקנה

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

הקוד השלם למאמר זה זמין באתר GitHub.


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