מיפוי נתוני LOB במצב שינה

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

LOB או Large OBject מתייחס לסוג נתונים באורך משתנה לאחסון אובייקטים גדולים.

לסוג הנתונים יש שתי גרסאות:

  • CLOB - חפץ גדול אופי יאחסן נתוני טקסט גדולים
  • BLOB - אובייקט גדול בינארי מיועד לאחסון נתונים בינאריים כמו תמונה, שמע או וידאו

במדריך זה נראה כיצד אנו יכולים להשתמש ב- ORM של Hibernate לצורך עצמים גדולים.

2. התקנה

לדוגמה, נשתמש במסד הנתונים של מצב שינה 5 ו- H2. לכן עלינו להכריז עליהם כתלות בתלות שלנו pom.xml:

 org.hibernate hibernate-core 5.4.12. com.h2database הסופי h2 1.4.196 

הגרסה האחרונה של התלות נמצאת במאגרי Maven Central.

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

3. מודל נתוני LOB

המודל שלנו "מִשׁתַמֵשׁ" יש מזהה, שם ותמונה כמאפיינים. נאחסן תמונה ב- מִשׁתַמֵשׁנכס התמונות ונמפה אותו ל- BLOB:

@Entity @Table (name = "user") משתמש בכיתה ציבורית {@ Id פרטי מחרוזת; @Column (name = "name", columnDefinition = "VARCHAR (128)") שם פרטי מחרוזת; @Lob @Column (name = "photo", columnDefinition = "BLOB") בתים פרטיים [] תמונה; // ...}

ה @תִלוּל ביאור מציין כי על מסד הנתונים לאחסן את המאפיין כ- חפץ גדול. ה columnDefinition בתוך ה @טור ביאור מגדיר את סוג העמודה עבור הנכס.

מכיוון שאנחנו הולכים לחסוך מערך בתים, אנחנו משתמשים כֶּתֶם.

4. שימוש

4.1. יזם מושב שינה

session = HibernateSessionUtil .getSessionFactory ("hibernate.properties") .openSession ();

באמצעות מעמד העוזר נבנה את מושב שינה באמצעות מידע מסד הנתונים המופיע ב hibernate.properties קוֹבֶץ.

4.2. יצירת מופע משתמש

נניח שהמשתמש מעלה את התמונה כקובץ תמונה:

משתמש משתמש = משתמש חדש (); InputStream inputStream = this.getClass () .getClassLoader () .getResourceAsStream ("profile.png"); אם (inputStream == null) {fail ("לא ניתן להשיג משאבים"); } user.setId ("1"); user.setName ("משתמש"); user.setPhoto (IOUtils.toByteArray (inputStream)); 

אנו ממירים את קובץ התמונה למערך בתים בעזרת העזרה של Apache Commons IO הספרייה, ולבסוף, אנו מקצים את מערך הבתים כחלק מהמערך החדש שנוצר מִשׁתַמֵשׁ לְהִתְנַגֵד.

4.3. חפץ גדול מתמיד

על ידי אחסון ה- מִשׁתַמֵשׁ משתמש ב מוֹשָׁב, ה שינה ימיר את האובייקט לרשומת מסד הנתונים:

session.persist (משתמש); 

בגלל ה @תִלוּל ביאור שהוכרז על הכיתה מִשׁתַמֵשׁ, שינה מבין שזה צריך לאחסן את "תמונה" נכס כ כֶּתֶם סוג מידע.

4.4. אימות מידע

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

מכיוון שאנו מכירים את הכנס מִשׁתַמֵשׁמזהה, נשתמש בו בכדי לאחזר את הנתונים ממסד הנתונים:

תוצאת משתמש = session.find (User.class, "1"); 

בואו נשווה את התוצאה של השאילתה עם הקלט מִשׁתַמֵשׁהנתונים שלה:

assertNotNull ("תוצאת השאילתה היא null", תוצאה); assertEquals ("שם המשתמש אינו חוקי", user.getName (), result.getName ()); assertTrue ("התמונה של המשתמש פגומה", Arrays.equals (user.getPhoto (), result.getPhoto ())); 

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

לכן הוחזר מִשׁתַמֵשׁ לאובייקט יהיה מידע זהה לזה של הנתונים שהוכנסו.

5. מסקנה

תִלוּל הוא סוג נתונים לאחסון נתוני אובייקט גדולים. יש שני סוגים של תִלוּל שנקרא כֶּתֶם ו CLOB. כֶּתֶם מיועד לאחסון נתונים בינאריים, בעוד CLOB מיועד לאחסון נתוני טקסט.

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

כמו תמיד הקוד למאמר זה זמין ב- GitHub.


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