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

Spring Data JDBC | اسپرینگ دیتا جی دی بی سی

00:25:23

توضیحات جلسه

🎥 این ویدیو قسمت صد و نوزدهم از بوت‌کمپ رایگان جاوا و هجدهمین جلسه از پلی‌لیست تخصصی آموزش فریم‌ورک اسپرینگ است. 📚 در این جلسه به سراغ یکی از ابزارهای قدرتمند و پرکاربرد در اکوسیستم اسپرینگ یعنی Spring Data JDBC می‌رویم. پس از بررسی JdbcTemplate، اکنون زمان آن است که با یک رویکرد ساده‌تر و منعطف‌تر برای تعامل با دیتابیس آشنا شویم. در این ویدیو بررسی می‌کنیم که Spring Data JDBC دقیقاً چیست و چه مزایایی نسبت به JdbcTemplate معمولی دارد. یاد می‌گیریم که چگونه آن را به پروژه اضافه کنیم، اینترفیس‌های Repository را تعریف کنیم و تفاوت بین Repository و CrudRepository را درک کنیم. همچنین نحوه کار با Annotationها برای نگاشت کلاس‌های دامین به جدول‌های دیتابیس را بررسی خواهیم کرد. در این جلسه یاد می‌گیریم: ⚙️ تعریف و مفهوم Spring Data JDBC و نحوه کارکرد آن 🛠️ نحوه اضافه کردن وابستگی‌های آن به پروژه اسپرینگ 🧩 تعریف Repository Interface برای موجودیت‌ها ✅ مقایسه دقیق تفاوت‌های Repository و CrudRepository 📦 استفاده از Annotationها برای Annotating Domain 🧠 جمع‌بندی نکات کلیدی و مزایای استفاده از این ابزار اگر در حال یادگیری Spring Boot هستید، Spring Data JDBC یکی از ابزارهایی است که سرعت توسعه شما را به شدت افزایش می‌دهد و کدهای لایه دیتابیس را تمیزتر و خواناتر می‌کند. 📌 یوتیوب: https://youtube.com/@farzadafi 📌 آپارت: https://aparat.com/farzadafi 📌 وب سایت: https://farzadafi.ir 📌 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi وب سایت: https://farzadafi.ir هر سوالی داشته باشید می‌توانید در گروه بپرسید تا من یا مربی‌های گروه کمکتان کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش کاملاً پروژه‌محور برای یادگیری عمیق جاوا و ورود به بازار کار.

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

مفاهیم کلیدی

  • Spring Data

پروژه بزرگ و جامع اسپرینگ که زیرپروژه‌های متعددی را برای ذخیره‌سازی داده‌ها (Persistence) در انواع دیتابیس‌های رابطه‌ای و غیررابطه‌ای (مانند JDBC، JPA، MongoDB، Neo4j) مدیریت می‌کند و هدف اصلی آن ساده‌سازی تعامل با پایگاه داده است.

  • Spring Data JDBC

ماژولی از Spring Data که هدف آن فراهم کردن یک لایه انتزاعی بسیار ساده برای کار با پایگاه‌های داده رابطه‌ای از طریق JDBC است، بدون آنکه پیچیدگی‌های سنگین ORMهای کامل مانند Hibernate را داشته باشد.

  • CrudRepository

یک اینترفیس پایه ارائه شده توسط Spring Data که متدهای استاندارد برای عملیات ایجاد، خواندن، به‌روزرسانی و حذف (CRUD) را به صورت پیش‌فرض تعریف کرده است. با ارث‌بری ریپازیتوری‌های پروژه از این اینترفیس، نیازی به پیاده‌سازی دستی متدها نخواهید داشت.

  • Annotations

انوتیشن‌ها نقش حیاتی در نگاشت کلاس‌های دامنه (Domain Classes) به جداول دیتابیس دارند. انوتیشن @Table برای مشخص کردن نام جدول (در صورت عدم تطابق با نام کلاس)، @Id برای تعیین کلید اصلی موجودیت، و @Column برای نگاشت اختصاصی ویژگی‌های کلاس به ستون‌های دیتابیس استفاده می‌شوند.

  • Automatic Implementation

قابلیت کلیدی Spring Data که در زمان اجرا (Run time)، پیاده‌سازی لازم برای اینترفیس‌های ریپازیتوری شما را به صورت خودکار تولید می‌کند. این ویژگی باعث حذف کدهای تکراری (Boilerplate Code) و کلاس‌های پیاده‌سازی دستی (مانند JdbcIngredientRepository) می‌شود.

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

  • تفاوت اصلی استفاده از JdbcTemplate در برابر Spring Data JDBC چیست؟

JdbcTemplate یک سطح پایین‌تر است و برنامه‌نویس باید دستورات SQL و نگاشت داده‌ها (Mapping) را به صورت دستی مدیریت کند؛ اما Spring Data JDBC با ارث‌بری از CrudRepository و استفاده از Proxyها، پیاده‌سازی‌های مورد نیاز را در زمان اجرا تولید کرده و کدهای تکراری را به حداقل می‌رساند.

  • چگونه Spring Data متوجه می‌شود که باید پیاده‌سازی یک اینترفیس را تولید کند؟

کافی است اینترفیس‌های ریپازیتوری شما از یکی از اینترفیس‌های پایه Spring Data (مانند Repository یا CrudRepository) ارث‌بری کنند. اسپرینگ در زمان بوت شدن اپلیکیشن، این اینترفیس‌ها را شناسایی و کلاس‌های پیاده‌سازی آن‌ها را به صورت پویا تولید می‌کند.

  • آیا استفاده از @Table در کلاس‌های دامنه الزامی است؟

خیر؛ به صورت پیش‌فرض Spring Data نام کلاس را به نام جدول متناظر نگاشت می‌کند. استفاده از @Table فقط زمانی ضروری است که بخواهید نام جدول در دیتابیس متفاوت از نام کلاس باشد (مثلاً نگاشت TacoOrder به Taco_Cloud_Order).

  • چرا با مهاجرت به Spring Data JDBC می‌توان کلاس‌های پیاده‌سازی دستی مانند JdbcOrderRepository را حذف کرد؟

چون Spring Data تمام متدهای استاندارد تعریف شده در CrudRepository را به صورت خودکار پیاده‌سازی می‌کند. شما فقط نیاز به تعریف اینترفیس دارید و نیازی به نوشتن کلاس‌های Jdbc... که حاوی کدهای خسته‌کننده SQL بودند نیست.

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

  • مهاجرت از کدهای سنتی JdbcTemplate به Spring Data JDBC

این سناریو شامل چهار گام اساسی برای کاهش کدهای پایگاه داده در یک پروژه اسپرینگ است:

۱. به‌روزرسانی وابستگی‌ها (Dependencies): ابتدا باید spring-boot-starter-jdbc را از فایل pom.xml حذف کرده و spring-boot-starter-data-jdbc را جایگزین کنید (وابستگی H2 باید باقی بماند).

۲. تغییر اینترفیس‌های ریپازیتوری: اینترفیس‌های موجود (مانند IngredientRepository) را طوری تغییر دهید که از CrudRepository ارث‌بری کنند. این کار باعث می‌شود متدهایی مانند findAll() و findById() بدون پیاده‌سازی دستی در دسترس باشند.

۳. افزودن انوتیشن به موجودیت‌ها (Domain Classes): کلاس‌های مدل خود را با @Id (برای مشخص کردن کلید اصلی) و در صورت نیاز با @Table و @Column جهت نگاشت دقیق نام‌ها به جداول و ستون‌های دیتابیس نشانه گذاری کنید.

۴. حذف کلاس‌های پیاده‌سازی: تمامی کلاس‌های دستی که پیش‌تر با JdbcTemplate پیاده کرده بودید (مانند JdbcIngredientRepository و JdbcOrderRepository) را با خیال راحت حذف کنید، چرا که پیاده‌سازی آن‌ها اکنون به عهده فریم‌ورک است.

بیشتر بدانید

  • مدیریت نام‌گذاری ستون‌ها

اگر نام ویژگی کلاس شما با نام ستون دیتابیس متفاوت است (مثلاً deliveryName در جاوا و customer_name در دیتابیس)، از انوتیشن @Column("customer_name") بر روی فیلد مربوطه در کلاس دامنه استفاده کنید تا اسپرینگ نگاشت صحیح را انجام دهد.

  • ترکیب وابستگی‌ها

دقت کنید که Spring Data JDBC یک Starter جدید است و نباید با Spring JDBC قدیمی در یک پروژه ترکیب شود؛ زیرا این کار باعث تداخل در مدیریت تراکنش‌ها و پیاده‌سازی‌ها می‌شود.

  • اشیاء بدون کلید اصلی

کلاس‌هایی که صرفاً برای ارتباط بین دو موجودیت هستند (مانند IngredientRef) و ستون شناسه‌ی خاصی ندارند، نیازی به انوتیشن @Id ندارند؛ Spring Data به راحتی آن‌ها را به عنوان جداول واسط مدیریت می‌کند.