جلسه شماره 96رایگان

What is ORM?

00:11:32

توضیحات جلسه

🎥 این ویدیو قسمت هشتاد و نهم از بوت‌کمپ رایگان جاوا است. 📚 Java ORM – آشنایی با ORM، JPA و Hibernate (مفاهیم تئوری) این ویدیو اولین قسمت از پلی‌لیست Java ORM (JPA / Hibernate) هست و توی این جلسه سراغ مفاهیم پایه‌ای و تئوری ORM می‌ریم. با هم بررسی می‌کنیم: ORM دقیقاً چی هست 🤔 چه مشکلی رو توی ارتباط بین جاوا و دیتابیس حل می‌کنه 🧩 و چرا توی پروژه‌های واقعی و بازار کار انقدر مهمه 🚀 در این ویدیو یاد می‌گیریم: 🧠 ORM چیست و چه مفهومی دارد؟ 🔗 ارتباط ORM با JPA و Hibernate ✅ مزایای استفاده از ORM در پروژه‌های جاوایی ⚠️ معایب و چالش‌های ORM و نکاتی که باید حواست بهشون باشه 📌 مرور نهایی برای جمع‌بندی و تثبیت مفاهیم 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، می‌تونی داخل گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.

جزوه و مستندات

مفاهیم کلیدی

  • ORM Object-Relational Mapping

یک تکنیک برنامه‌نویسی است که مانند پلی بین زبان‌های شی‌گرا، مانند Java یا Python، و پایگاه‌داده‌های رابطه‌ای، مانند MySQL یا PostgreSQL، عمل می‌کند. این ابزار اجازه می‌دهد با استفاده از مفاهیم شی‌گرایی با دیتابیس تعامل داشته باشیم.

  • Object

در دنیای برنامه‌نویسی، یک موجودیت واقعی مانند تراکنش بانکی یا کاربر را نشان می‌دهد. هر Object شامل داده‌ها، یعنی Attributes، و رفتارها، یعنی Methods، است.

  • Relational Database

پایگاه‌داده‌ای است که داده‌ها را در قالب جدول‌ها، شامل ردیف‌ها و ستون‌ها، ذخیره می‌کند. این سیستم‌ها از استاندارد ACID پشتیبانی می‌کنند و بسیار انعطاف‌پذیر هستند، اما درکی از مفهوم Object ندارند.

  • Mapping

فرآیند متصل کردن مدل‌های شی‌گرا به جدول‌های دیتابیس است. در این لایه، Objectها به‌صورت خودکار به ردیف‌های جدول تبدیل می‌شوند و برعکس، نتیجه کوئری‌های دیتابیس دوباره به‌شکل Object در برنامه ظاهر می‌شود.

  • Encapsulation

مفهومی در شی‌گرایی است که در آن داده‌ها و رفتارهای مربوط به یک موجودیت در قالب یک Object بسته‌بندی می‌شوند. در مقابل، دیتابیس‌های رابطه‌ای ساختاری مسطح یا Flat دارند و چنین قابلیتی را به‌صورت مستقیم ارائه نمی‌کنند.


موارد مصاحبه ای

  • تفاوت اصلی بین مدل‌های شی‌گرا و دیتابیس‌های رابطه‌ای چیست؟

در مدل‌های شی‌گرا مفاهیمی مانند ارث‌بری یا Inheritance و ترکیب یا Composition وجود دارد. اما دیتابیس‌های رابطه‌ای ساختاری مسطح دارند و داده‌ها را در جدول‌ها، با استفاده از کلیدهای اصلی یا Primary Key و کلیدهای خارجی یا Foreign Key، مدیریت می‌کنند.

  • چرا استفاده از ORM سرعت توسعه را افزایش می‌دهد؟

چون برنامه‌نویس نیازی به نوشتن کدهای تکراری برای مدیریت Connectionها، ResultSetها و کوئری‌های دستی SQL ندارد. ORM بسیاری از این کارها را به‌صورت خودکار انجام می‌دهد.

  • مزیت امنیتی استفاده از ORM چیست؟

استفاده از ORM ریسک حملات SQL Injection را تا حد زیادی کاهش می‌دهد؛ زیرا این ابزار کوئری‌ها را به‌صورت امن تولید و اجرا می‌کند.

  • معایب استفاده از ORM نسبت به کدهای SQL دستی چیست؟

۱. سربار عملکردی: به دلیل وجود یک لایه میانی، سرعت اجرا نسبت به SQL خالص کمی کمتر است.

۲. پیچیدگی در کوئری‌های خاص: برای کوئری‌های بسیار پیچیده، ممکن است عملکرد ORM بهینه نباشد.

۳. منحنی یادگیری: یادگیری کار با یک فریم‌ورک ORM جدید به زمان نیاز دارد.


سناریو کاربردی

در یک اپلیکیشن مدیریت هتل، موجودیت‌هایی مانند مهمان یا Guest و رزرو یا Reservation داریم.

در حالت عادی و بدون استفاده از ORM، برای ذخیره یک رزرو جدید باید کدهای طولانی JDBC بنویسیم، کوئری INSERT را به‌صورت دستی تایپ کنیم و پارامترها را تک‌تک مقداردهی کنیم.

با استفاده از ORM، مانند Hibernate در جاوا، برنامه‌نویس فقط با شیء Reservation کار می‌کند. وقتی متد ذخیره صدا زده می‌شود، ORM خودش تشخیص می‌دهد که کدام ویژگی‌های شیء باید در کدام ستون‌های جدول دیتابیس قرار بگیرند و دستور SQL لازم را به‌صورت خودکار در پشت صحنه تولید و اجرا می‌کند.


بیشتر بدانید

  • تولید خودکار کد

بسیاری از ابزارهای مدرن ORM قابلیت Automatic SQL Generation دارند و می‌توانند بر اساس تغییرات کلاس‌ها، جدول‌های دیتابیس را به‌روزرسانی کنند.

  • یکپارچگی زبان

با ORM می‌توانید با همان زبانی که برنامه را می‌نویسید، مانند C# یا Python، عملیات دیتابیس را انجام دهید. بنابراین نیازی نیست مدام بین سینتکس زبان برنامه‌نویسی و سینتکس SQL جابه‌جا شوید.

  • تعامل با کوئری‌های پیچیده

در بیشتر فریم‌ورک‌های ORM، اگر به اجرای یک کوئری بسیار بهینه و پیچیده نیاز داشته باشید، همچنان امکان نوشتن Native SQL وجود دارد. در این حالت، کد SQL به‌صورت مستقیم نوشته می‌شود تا مشکل افت عملکرد برطرف شود.