Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

What is ORM?

📖توضیحات درس

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

📄جزوه

مفاهیم کلیدی

  • 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) وجود دارد تا مشکل افت عملکرد حل شود.