Inserting Data with JdbcTemplate | درج داده با JdbcTemplate
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
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) ریپازیتوری مستقل طراحی میشود و موجودیتهای تابعه صرفاً از طریق متدهای موجود در ریشه ذخیره و بازیابی میشوند تا یکپارچگی دادهها حفظ گردد.
