איך לבצע שמירת נתונים משאילתות SOQL בצורה יעילה יותר

ליאור נכתב על ידי ליאור לביא, עודכן בתאריך 06/10/2021

אחת הדרכים לכתיבת קוד יעיל יותר ב-Apex היא שימוש נכון במשתנים מסוג Collections כדי להחזיק תוצאות של שאילתות SOQL. שאילתות אלו מחזירות תוצאות מסוג List, אבל, כפי שכותרת פוסט זה רומזת, זאת לא השיטה היעילה ביותר לשמירת תוצאות אלו. במקום זאת, נעדיף להשתמש ב-Collection מסוג Map. הסיבה לכך היא שבעוד ש-Collection מסוג List יחזיק עבורנו רשימה של רשומות, Collection מסוג Map יאפשר לנו לחלץ גם רשימה של רשומות, וגם רשימה של IDs של הרשומות, באמצעות המתודות Map.values() ו-Map.keySet().

דוגמה

בוא נניח ואנחנו רוצים להריץ שאילתה שתחזיר לנו את כל המשתמשים במערכת:

SELECT Id, Name FROM User

אופציה אחת שעומדת לרשותנו היא לשמור את התוצאות ל-List בצורה הבאה:

List<User> allUsers = [SELECT Id, Name FROM User];

כעת יש לנו רשימה של כל המשתמשים במערכת.

אופציה שניה היא לשמור את התוצאות ל-Map בצורה הבאה:

Map<Id, User> allUsers = new Map<Id, User>([SELECT Id, Name FROM User]);

כעת יש לנו שלושה תוצרים, באופן הבא:

  1. מפה של כל המשתמשים שלנו, ממפוים לפי ID: המשתנה allUsers.
  2. סט של כל ה-IDs של המשתמשים שלנו באופן הבא: allUsers.keySet()
  3. רשימה של כל המשתמשים שלנו, באופן הבא: allUsers.values()

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