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

Inserting Data with JdbcTemplate | درج داده با JdbcTemplate

00:24:41

توضیحات جلسه

🎥 این ویدیو قسمت صد و هجدهم از بوت‌کمپ رایگان جاوا و هفدهمین جلسه از پلی‌لیست تخصصی آموزش فریم‌ورک اسپرینگ است. 📚 در این جلسه به سراغ یکی از اصلی‌ترین نیازها در تعامل با دیتابیس، یعنی ذخیره‌سازی و درج داده‌ها (Write Data) با استفاده از JdbcTemplate می‌رویم. پس از یادگیری مباحث مربوط به خواندن داده‌ها، اکنون نوبت آن است که یاد بگیریم چگونه اطلاعات جدید را به صورت اصولی و امن در دیتابیس ذخیره کنیم. در این ویدیو به بررسی عملی نحوه پیاده‌سازی متدهای درج داده (Insert) در لایه دسترسی به داده می‌پردازیم. این مهارت برای هر توسعه‌دهنده بک‌اند که با اسپرینگ کار می‌کند حیاتی است تا بتواند تعامل کاملی با دیتابیس‌های رابطه‌ای داشته باشد. در این جلسه یاد می‌گیریم: ⚙️ نحوه درج یک ردیف جدید (Inserting a Row) در جدول‌های دیتابیس 🛠️ بررسی عملی متدهای مربوط به عملیات Insert در JdbcTemplate ✅ نحوه پیاده‌سازی استاندارد ذخیره‌سازی داده در پروژه 🧠 جمع‌بندی و مرور نکات فنی برای نوشتن داده در اسپرینگ اگر در حال یادگیری Spring Boot هستید، تسلط بر نحوه نوشتن و ذخیره داده‌ها یکی از مهارت‌های کلیدی برای ورود به بازار کار و مدیریت صحیح دیتابیس در پروژه‌های واقعی است. 📌 یوتیوب: https://youtube.com/@farzadafi 📌 آپارت: https://aparat.com/farzadafi 📌 وب سایت: https://farzadafi.ir 📌 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi وب سایت: https://farzadafi.ir هر سوالی داشته باشید می‌توانید در گروه بپرسید تا من یا مربی‌های گروه کمکتان کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش کاملاً پروژه‌محور برای یادگیری عمیق جاوا و ورود به بازار کار.

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

مفاهیم کلیدی

  • JdbcTemplate.update()

متدی در کلاس JdbcTemplate برای اجرای تمام دستورات تغییر دهنده داده‌ها (DML) شامل INSERT، UPDATE و DELETE؛ این متد بر خلاف متد query() نیازی به نگاشت شیء از ResultSet ندارد و صرفاً دستور SQL و مقادیر پارامترها را دریافت می‌کند.

  • Aggregate Root

مفهومی از طراحی دامنه‌محور (DDD) که در آن یک موجودیت اصلی (مانند TacoOrder) نقطه ورود و مرجع مدیریت چرخه حیات مجموعه‌ای از اشیاء وابسته (نظیر Taco) است؛ اشیاء وابسته نباید به طور مستقل خارج از کانتکست موجودیت ریشه مدیریت یا ذخیره شوند.

  • GeneratedKeyHolder

کلاسی در فریم‌ورک اسپرینگ جهت بازیابی و نگهداری کلیدهای اصلی خودکار تولیدشده توسط پایگاه داده (نظیر ستون‌های IDENTITY یا AUTO_INCREMENT) پس از اجرای دستور درج.

  • PreparedStatementCreatorFactory

کلاس کارخانه‌ای برای تعریف ساختار دستور درج، تعیین صریح نوع پارامترهای ورودی و فعال‌سازی قابلیت بازیابی کلیدهای خودکار با فراخوانی متد setReturnGeneratedKeys(true).

  • PreparedStatementCreator

اینترفیسی در اسپرینگ برای ساخت یک نمونه اختصاصی از PreparedStatement همراه با مقداردهی پارامترهای پویا جهت ارسال به متدهای JdbcTemplate.

  • Linking Entity

کلاس یا جدولی میانی (نظیر IngredientRef) که وظیفه برقراری ارتباط چندبه‌چند میان دو موجودیت (ارتباط بین Taco و Ingredient) را همراه با اطلاعات تکمیلی مانند شاخص ترتیب قرارگیری ایفا می‌کند.

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

  • تفاوت متد update() با query() در JdbcTemplate چیست؟

متد update() برای دستورات اصلاح داده (INSERT، UPDATE، DELETE) استفاده می‌شود و تعداد ردیف‌های تحت تأثیر (int) را برمی‌گرداند و نیازی به RowMapper ندارد؛ اما query() برای عملیات واکشی (SELECT) به کار می‌رود و داده‌های خروجی را با استفاده از RowMapper به مدل‌های دامنه‌ای تبدیل می‌کند.

  • چگونه کلیدهای اصلی تولید شده توسط دیتابیس (Auto-Generated Keys) با JdbcTemplate دریافت می‌شوند؟

با فعال‌سازی پرچم تولید کلید در شیء PreparedStatementCreatorFactory با متد setReturnGeneratedKeys(true) و سپس ارسال نمونه PreparedStatementCreator به همراه یک شیء از نوع GeneratedKeyHolder به متد update(). پس از اجرای کوئری، کلید تولیدشده از طریق keyHolder.getKey() قابل دریافت است.

  • چالش ذخیره‌سازی Aggregateها با JdbcTemplate معمولی چیست؟

از آنجا که JdbcTemplate یک انتزاع سطح پایین روی JDBC است، وظیفه مدیریت روابط والد-فرزندی، تراکنش‌ها، بازیابی کلید والد و درج دستی فرزندان و جداول واسط کاملاً بر دوش برنامه‌نویس است و به شکل خودکار (مشابه فریم‌ورک‌های ORM یا Spring Data) مدیریت نمی‌شود.

  • استفاده از الگوی Aggregate Root چه نقشی در طراحی Repositories دارد؟

بر اساس اصول طراحی، فقط برای موجودیت ریشه (Aggregate Root) ریپازیتوری مستقل طراحی می‌شود و موجودیت‌های تابعه صرفاً از طریق متدهای موجود در ریشه ذخیره و بازیابی می‌شوند تا یکپارچگی داده‌ها حفظ گردد.