מדריך לאובייקטים של Java

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

אובייקט הנתונים של Java הוא ממשק API המיועד לעמידה של נתונים מונחי אובייקטים לכל בסיס נתונים ולספק שפת שאילתות ידידותית למשתמש באמצעות התחביר של Java.

במאמר זה, אנו הולכים לראות כיצד להשתמש בממשק ה- API של JDO לצורך התעקשות האובייקטים שלנו במסד נתונים.

2. Maven תלות והתקנה

אנו נשתמש ב- DataNucleus JDO API המעודכן ומציע תמיכה מלאה ב- API של JDO 3.2.

בואו נוסיף את התלות הבאה שלנו pom.xml קוֹבֶץ:

 org.datanucleus javax.jdo 3.2.0-m6 org.datanucleus datanucleus-core 5.1.0-m2 org.datanucleus datanucleus-api-jdo 5.1.0-m2 org. -xml 5.0.0-release 

הגרסאות האחרונות של התלות נמצאות כאן: javax.jdo, datanucleus-core, datanucleus-api-jdo, datanucleus-rdbms ו- datanucleus-xml.

3. מודל

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

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

מוצר @PersistenceCapable בכיתה ציבורית {@PrimaryKey @Persistent (valueStrategy = IdGeneratorStrategy.INCREMENT) מזהה ארוך; שם מחרוזת; מחיר כפול = 0.0; // בונים סטנדרטיים, גטרים, סטרים}

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

ברגע שניצור את האובייקט שלנו, עלינו להריץ את המשפר כדי ליצור את קוד הביצוע הנדרש על ידי JDO. באמצעות Maven נוכל להפעיל פקודה זו:

mvn datanucleus: שפר

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

כמובן, ניתן לעשות זאת באופן אוטומטי במהלך בניית Maven:

 org.datanucleus datanucleus-maven-plugin 5.0.2 JDO $ {basedir} /datanucleus.properties $ {basedir} /log4j.properties שיעורי התהליך האמיתיים משפרים 

הגרסה האחרונה של התוסף נמצאת כאן: תוסף datanucleus-maven

4. אובייקטים מתמידים

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

PersistenceManagerFactory pmf = JDOPersistenceManagerFactory חדש (pumd, null); PersistenceManager pm = pmf.getPersistenceManager (); 

עסקאות משמשות כדי לאפשר החזר כספי במקרה של שגיאה:

Transaction tx = pm.currentTransaction ();

אנו מבצעים את העסקאות שלנו בתוך a נסה לתפוס לַחסוֹם:

מוצר מוצר = מוצר חדש ("טאבלט", 80.0); pm.makePersistent (מוצר);

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

אם מסיבה כלשהי לא ניתן להשלים את העסקה, אנו מבצעים החזר כספי, וגם סוגרים את החיבור למסד הנתונים באמצעות pm.close ():

לבסוף {if (tx.isActive ()) {tx.rollback (); } pm.close (); }

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

PersistenceUnitMetaData pumd = PersistenceUnitMetaData חדש ("יחידה דינמית", "RESOURCE_LOCAL", null); pumd.addClassName ("com.baeldung.jdo.Product"); pumd.setExcludeUnlistedClasses (); pumd.addProperty ("javax.jdo.option.ConnectionDriverName", "org.h2.Driver"); pumd .addProperty ("javax.jdo.option.ConnectionURL", "jdbc: h2: mem: mypersistence"); pumd.addProperty ("javax.jdo.option.ConnectionUserName", "sa"); pumd.addProperty ("javax.jdo.option.ConnectionPassword", ""); pumd.addProperty ("datanucleus.autoCreateSchema", "true");

5. חפצי קריאה

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

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

שאילתה q = pm.newQuery ("בחר מ-" + Product.class.getName () + "WHERE מחיר <1"); רשימת מוצרים = (רשימה) q.execute (); איטרטור איטר = products.iterator (); בעוד (iter.hasNext ()) {מוצר p = iter.next (); // הצג את פרטי המוצר} 

6. עדכון אובייקטים

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

שאילתת שאילתה = pm.newQuery (Product.class, "name == \" Phone \ ""); תוצאת אוסף = (אוסף) query.execute (); מוצר מוצר = (מוצר) result.iterator (). הבא (); product.setName ("טלפון אנדרואיד"); 

7. מחיקת אובייקטים

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

שאילתת שאילתות = pm.newQuery (Product.class, "name == \" טלפון אנדרואיד \ ""); תוצאת אוסף = (אוסף) query.execute (); מוצר מוצר = (מוצר) result.iterator (). הבא (); pm.deletePersistent (מוצר); 

8. מאגרי XML

באמצעות תוסף ה- XML ​​נוכל להשתמש בקובצי XML לצורך התעקשות הנתונים שלנו.

אנו מציינים את שלנו ConnectionURL המציין שהוא קובץ XML ומציין את שם הקובץ:

pumdXML.addProperty ("javax.jdo.option.ConnectionURL", "xml: file: myPersistence.xml");

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

@PersistenceCapable () מחלקה ציבורית ProductXML {@XmlAttribute פרטי ארוך productNumber = 0; @PrimaryKey פרטי שם מחרוזת = null; מחיר כפול פרטי = 0.0; // גטרים וקובעים סטנדרטיים

ה @Xml תכונה ביאור מציין כי זה יופיע בקובץ ה- XML ​​כתכונה של האלמנט.

בואו ניצור ונמשיך את המוצר שלנו:

ProductXML productXML = ProductXML חדש (0, "טאבלט", 80.0); pm.makePersistent (productXML);

אנו מאחסנים את המוצר בקובץ ה- XML:

 טאבלט 80.0 

8.1. שחזר אובייקטים ממאגר הנתונים XML

אנו יכולים לשחזר את האובייקטים שלנו מקובץ ה- XML ​​באמצעות שאילתה:

שאילתה q = pm.newQuery ("בחר מ-" + ProductXML.class.getName ()); רשימת מוצרים = (רשימה) q.execute ();

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

9. שאילתות JDO

JDOQL היא שפת שאילתות מבוססת עצמים המיועדת לבצע שאילתות באמצעות אובייקטים של Java.

9.1. הצהרת JDOQL

באמצעות שאילתת ההצהרה, אנו מצהירים על הפרמטרים וקובעים אותם באמצעות Java, זה מבטיח בטיחות סוג:

שאילתה qDJDOQL = pm.newQuery (Product.class); qDJDOQL.setFilter ("שם == 'טאבלט' && מחיר == מחיר_ערך"); qDJDOQL.declareParameters ("מחיר כפול מחיר"); רשימת תוצאות qDJDOQL = qDJDOQL.setParameters (80.0) .executeList ();

9.2. SQL

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

שאילתת שאילתות = pm.newQuery ("javax.jdo.query.SQL", "בחר * ממוצר"); query.setClass (Product.class); תוצאות רשימה = query.executeList ();

אנו משתמשים javax.jdo.query.SQL כפרמטר אחד עבור אובייקט השאילתה והפרמטר השני הוא ה- SQL עצמו.

9.3. JPQL

JDO מספק מנגנון לביצוע גם שאילתות JPA. אנו יכולים להשתמש בתחביר המלא של שפת שאילתת JPA:

שאילתה q = pm.newQuery ("JPQL", "בחר p מתוך" + Product.class.getName () + "p WHERE p.name = 'מחשב נייד'"); תוצאות רשימה = (רשימה) q. לבצע ();

10. סיכום

במדריך זה אנו:

  • יצר יישום CRUD פשוט המשתמש ב- JDO
  • שמר ואחזר את הנתונים שלנו כ- XML
  • בחן מנגנוני שאילתה נפוצים

כמו תמיד, תוכל למצוא את הקוד מהמאמר ב- Github.