JPA CRUD Tutorial | آموزش CRUD در JPA
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
-
JPA (Java Persistence API) یک استاندارد یا Specification در جاوا است که برای مدیریت دادههای رابطهای در اپلیکیشنها استفاده میشود و عملیات دیتابیسی را تسهیل میکند.
-
ORM (Object-Relational Mapping) تکنیکی است که شیءها (Objects) در زبان برنامهنویسی را به جداول در دیتابیس متناظر میکند تا برنامهنویس بدون درگیری مستقیم با SQL، با دیتابیس کار کند.
-
Implementation (پیادهسازی) از آنجایی که JPA صرفاً یک استاندارد است، برای اجرا به یک کتابخانه پیادهساز نیاز دارد؛ Hibernate یکی از محبوبترین پیادهسازهای JPA است.
-
Entity کلاسی که نمایانگر یک جدول در دیتابیس است. هر نمونه (Instance) از این کلاس متناظر با یک سطر از آن جدول خواهد بود.
-
EntityManager رابط اصلی (Interface) برای تعامل با Persistence Context است که عملیاتهای CRUD را روی Entityها مدیریت میکند.
-
Transaction یک واحد کاری که مجموعهای از عملیاتها را در بر میگیرد. برای تغییر در دیتابیس (مانند ایجاد، آپدیت یا حذف)، شروع (Begin) و ثبت (Commit) تراکنش الزامی است.
-
Persistence Context محیطی که در آن نمونههای Entity توسط EntityManager مدیریت میشوند و تغییرات آنها ردیابی میشود.
-
Lombok کتابخانهای برای کاهش کدهای تکراری (Boilerplate) که با استفاده از Annotationهایی مانند
@Dataیا@NoArgsConstructorبه صورت خودکار متدها و سازندهها را ایجاد میکند.
موارد مصاحبه ای
-
تفاوت JPA و Hibernate در چیست؟ JPA یک واسط برنامهنویسی (API) و مجموعهای از استانداردهاست، در حالی که Hibernate یک فریمورک است که این استانداردها را پیادهسازی کرده و قابلیتهای اضافی نیز ارائه میدهد.
-
چرا هر Entity حتماً به No-Args Constructor نیاز دارد؟ فریمورکهایی مانند Hibernate برای ساختن نمونه از کلاس Entity هنگام واکشی دادهها از Reflection استفاده میکنند و وجود یک سازنده بدون آرگومان (Public یا Protected) برای این کار الزامی است.
-
تفاوت متد
persistوmergeچیست؟ متدpersistبرای ذخیره یک Entity جدید و وارد کردن آن به دیتابیس (Insert) استفاده میشود، در حالی کهmergeبرای بهروزرسانی (Update) یک Entity که قبلاً از وضعیت مدیریت خارج شده، به کار میرود. -
چرا برای عملیات Read (مانند
find) الزامی به تراکنش دستی نیست اما برای Create/Update/Delete هست؟ عملیات خواندن تغییری در وضعیت دیتابیس ایجاد نمیکند، اما برای حفظ یکپارچگی دادهها (Data Integrity) در عملیاتهای تغییردهنده، حتماً باید تراکنش مدیریت شود تا در صورت بروز خطا، تغییرات ذخیره نشوند. -
اگر متد
commitدر انتهای تراکنش صدا زده نشود چه اتفاقی میافتد؟ حتی اگر کدهای مربوط بهpersistیاmergeاجرا شده باشند، هیچ تغییری در دیتابیس نهایی نمیشود و اصطلاحاً عملیات Rollback میشود یا اصلاً اعمال نمیگردد.
سناریو کاربردی
در این آموزش، مدیریت موجودیت دانشجو (Student) پیادهسازی شد. ابتدا یک کلاس با ویژگیهای id (کلید اصلی)، name و age تعریف گردید.
- عملیات Create: ابتدا یک Object از دانشجو ساخته شد، سپس یک تراکنش آغاز گشت و با متد
persistآبجکت در دیتابیس ذخیره و تراکنش Commit شد. - عملیات Read: با استفاده از متد
findو پاس دادن کلاس Entity و مقدار کلید اصلی (ID)، اطلاعات دانشجو از دیتابیس واکشی شد. - عملیات Update: ابتدا دانشجو با متد
findپیدا شد، مقدار ویژگی مورد نظر (مثلاً سن) تغییر کرد و سپس با متدmergeدر قالب یک تراکنش، تغییرات در دیتابیس ثبت گردید. - عملیات Delete: مشابه آپدیت، ابتدا دانشجو پیدا شد و سپس با متد
removeدرون یک تراکنش، رکورد مربوطه حذف گردید.
بیشتر بدانید
-
نکته دیباگ با فعال کردن خاصیت
show_sqlدر تنظیمات Hibernate، میتوانید کوئریهای SQL تولید شده توسط JPA را در کنسول مشاهده کنید که برای درک بهتر عملکرد سیستم بسیار مفید است. -
نکته در مورد Lombok هنگامی که یک سازنده دلخواه (مثل
@AllArgsConstructor) اضافه میکنید، سازنده پیشفرض جاوا حذف میشود؛ بنابراین حتماً باید از@NoArgsConstructorبرای نیاز JPA استفاده کنید.
