תחילת העבודה עם jOOQ

1. הקדמה

במדריך זה אנו נערוך סיור מהיר בהפעלת יישום באמצעות jOOQ (שאילתת אוריינטציה של Java). ספרייה זו מייצרת שיעורי Java בהתבסס על טבלאות מסד הנתונים ומאפשרת לנו ליצור שאילתות SQL בטוחות מסוג באמצעות ה- API הרהוט שלה.

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

2. תלות Maven

עבור ספריית jOOQ, נצטרך את שלוש התלות הבאות של jOOQ:

 org.jooq jooq 3.13.4 org.jooq jooq-meta 3.13.4 org.jooq jooq-codegen 3.13.4 

נצטרך גם תלות אחת עבור מנהל ההתקן PostgreSQL:

 org.postgresql postgresql 42.2.16 

3. מבנה מסד הנתונים

לפני שנתחיל, בואו ליצור סכימת DB פשוטה לדוגמאות שלנו. נשתמש בפשטות מְחַבֵּר ו מאמר מערכת יחסים:

צור טבלה AUTHOR (מספר שלם מזהה PRIMARY KEY, FIRST_NAME varchar (255), LAST_NAME varchar (255), ALG שלם AGE); צור טבלה ARTICLE (מספר שלם מזהה PRIMARY KEY, TITLE varchar (255) not null, DESCRIPTION varchar (255), AUTHOR_ID שלם CONSTRAINT fk_author_id REFERENCES AUTHOR);

4. חיבור מסד נתונים

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

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

מחרוזת userName = "משתמש"; סיסמת מחרוזת = "לעבור"; מחרוזת url = "jdbc: postgresql: // db_host: 5432 / baeldung"; Connection connect = DriverManager.getConnection (url, שם משתמש, סיסמה); 

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

הקשר DSLContext = DSL.using (conn, SQLDialect.POSTGRES);

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

5. יצירת קוד

כדי ליצור שיעורי Java לטבלאות מסדי הנתונים שלנו, נצטרך את הדברים הבאים jooq-config.xml קוֹבֶץ:

   org.postgresql.Driver jdbc: postgresql: // db_url: 5432 / baeldung_database סיסמת שם משתמש org.jooq.codegen.JavaGenerator org.jooq.meta.postgres.PostgresDatabase public. * com.baeldung.jooq.model C: / projects / baeldung / מדריכים / jooq- דוגמאות / src / main / java 

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

כדי לבצע את הכלי לייצור קוד jOOQ, עלינו להפעיל את הקוד הבא:

GenerationTool.generate (Files.readString (Path.of ("jooq-config.xml"));

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

com.baeldung.model.generated.tables.Article; com.baeldung.model.generated.tables.Author;

6. CRUD פעולות

עכשיו, בואו נסתכל על כמה פעולות CRUD בסיסיות שנוכל לבצע באמצעות ספריית jOOQ.

6.1. יוצר

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

מאמר ArticleRecord = context.newRecord (Article.ARTICLE);

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

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

article.setId (2); article.setTitle ("דוגמאות jOOQ"); article.setDescription ("כמה דוגמאות לפעולות jOOQ CRUD"); article.setAuthorId (1);

לבסוף, עלינו להפעיל את ה- חנות השיטה ברשומה כדי לשמור אותה במסד הנתונים:

article.store ();

6.2. קריאה

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

מחברי התוצאה = context.select (). מ- (Author.AUTHOR) .fetch ();

הנה, אנו משתמשים ב- בחר שיטה בשילוב עם מ סעיף המציין מאיזו טבלה אנו רוצים לקרוא. קורא ל לְהָבִיא השיטה מבצעת את שאילתת SQL ומחזירה את התוצאה שנוצרה.

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

author.forEach (author -> {Integer id = author.getValue (Author.AUTHOR.ID); String firstName = author.getValue (Author.AUTHOR.FIRST_NAME); String lastName = author.getValue (Author.AUTHOR.LAST_NAME); גיל שלם = author.getValue (Author.AUTHOR.AGE); System.out.printf ("למחבר% s% s יש מזהה:% d וגיל:% d% n", שם פרטי, שם משפחה, מזהה, גיל);} );

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

תוֹצָאָה מאמרים = context.select (Article.ARTICLE.ID, Article.ARTICLE.TITLE). מאת (Author.AUTHOR) .fetch ();

אנחנו יכולים גם לבחור אובייקט יחיד עם ה- fetchOne שיטה. הפרמטרים עבור זה הם הפניה לטבלה ותנאי שתתאים לרשומה הנכונה.

במקרה שלנו, בואו פשוט נבחר מְחַבֵּר עם מזהה השווה ל -1:

AuthorRecord author = context.fetchOne (Author.AUTHOR, Author.AUTHOR.ID.eq (1))

אם אין רשומה שתואמת את התנאי, fetchOne השיטה תחזור ריק.

6.3. עִדכּוּן

כדי לעדכן רשומה נתונה, נוכל להשתמש ב- עדכון שיטה מה- DSLContext אובייקט בשילוב עם מַעֲרֶכֶת קריאות שיטה לכל תחום שאנחנו צריכים לשנות. אמירות אלה צריכות להיות מלווה בא איפה סעיף עם תנאי התאמה תקין:

context.update (Author.AUTHOR) .set (Author.AUTHOR.FIRST_NAME, "David") .set (Author.AUTHOR.LAST_NAME, "Brown"). Where (Author.AUTHOR.ID.eq (1)). לבצע ();

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

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

ArticleRecord מאמר = context.fetchOne (Article.ARTICLE, Article.ARTICLE.ID.eq (1)); article.setTitle ("כותרת מאמר חדשה"); article.store ();

ה חנות השיטה תחזור 1 אם הפעולה הצליחה או 0 אם העדכון לא היה נחוץ. לדוגמא, שום דבר לא תאם את המצב.

6.4. מוחק

כדי למחוק רשומה נתונה, נוכל להשתמש ב- לִמְחוֹק שיטה מה- DSLContext לְהִתְנַגֵד. יש להעביר את תנאי המחיקה כפרמטר בהמשך איפה סָעִיף:

context.delete (Article.ARTICLE) .where (Article.ARTICLE.ID.eq (1)) .execute ();

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

אפשר גם למחוק רשומה שהושגה כבר על ידי ביצוע אותה לִמְחוֹק שיטה:

ArticleRecord articleRecord = context.fetchOne (Article.ARTICLE, Article.ARTICLE.ID.eq (1)); articleRecord.delete ();

ה לִמְחוֹק השיטה תחזור 1 אם הפעולה הצליחה או 0 אם לא היה צורך במחיקה. לדוגמא, כאשר שום דבר לא הותאם לתנאי.

7. מסקנה

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


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