JDBC vs JdbcTemplate in Spring | مقایسه JDBC و JdbcTemplate در اسپرینگ
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- Data Persistence
قابلیت ذخیرهسازی و نگهداری دادههای برنامه در یک حافظه پایدار غیرفرار مانند پایگاه دادههای رابطهای، به طوری که دادهها پس از خاموش شدن برنامه یا سرور از بین نروند.
- JDBC
مخفف Java Database Connectivity؛ رابط استاندارد جاوا در سطح پایه جهت برقراری ارتباط، ارسال دستورات SQL و دریافت نتایج از پایگاه دادههای رابطهای.
- JPA
مخفف Java Persistence API؛ استاندارد نگاشت شیء-رابطهای (ORM) در اکوسیستم جاوا که امکان مدیریت و ذخیرهسازی اشیاء به صورت مستقیم در جداول دیتابیس را با کمترین کدنویسی فراهم میسازد.
- JdbcTemplate
کلاس انتزاعی ارائهشده توسط فریمورک اسپرینگ که تمام پیچیدگیها و کدهای تکراری ارتباط با دیتابیس شامل باز کردن و بستن اتصالات، ایجاد دستورات و مدیریت خطاها را در خود کپسوله میکند.
- Boilerplate Code
کدهای تکراری، ساختاری و تشریفاتی نظیر باز و بسته کردن مداوم Connection، Statement و ResultSet که برای اجرای ارتباط لازمند اما ارتباط مستقیمی با منطق تجاری سیستم ندارند.
- Checked Exception
اکسپشنهایی در جاوا نظیر SQLException که کامپایلر مدیریت صریح آنها را در بلوک try-catch یا افزودن به امضای متد با throws اجباری میکند.
- Unchecked Exception
اکسپشنهای زمان اجرا که نیازمند مدیریت اجباری در بلوک try-catch نیستند؛ اسپرینگ خطاهای سطح پایین SQLException را به اکسپشنهای بدون چک تبدیل میکند تا کدها تمیزتر باقی بمانند.
- RowMapper
مکانیزم یا اینترفیسی تابعی در اسپرینگ جهت نگاشت ردیف به ردیف نتایج به دست آمده از ResultSet به نمونههایی از اشیاء دامنه برنامه (Domain Objects).
- Domain Entity Identifier
فیلد شناسه منحصربهفرد نظیر id در اشیاء دامنه که امکان تفکیک ردیفهای متناظر در جداول پایگاه داده و مدیریت چرخه حیات دادهها را فراهم میکند.
- Lombok
کتابخانهای در جاوا که با استفاده از انوتیشنها در زمان کامپایل، متدهای دسترسی (Getter/Setter)، سازندهها و متدهای equals/hashCode را به صورت خودکار ایجاد و کدهای ساختاری تکراری را حذف مینماید.
موارد مصاحبه ای
- چرا استفاده مستقیم از Raw JDBC در برنامههای سازمانی توصیه نمیشود؟
زیرا استفاده مستقیم از JDBC نیازمند کدهای تکراری زیادی برای ایجاد اتصال، ساخت Statement، بستن منابع در بلوکهای طولانی و همچنین مدیریت اکسپشنهای خستهکننده SQLException است که منطق اصلی کوئری را در میان کدهای ساختاری پنهان میکند.
- کلاس JdbcTemplate در Spring چگونه مشکل کدهای تکراری را برطرف میکند؟
این کلاس تمامی مراحل ایجاد Connection، آمادهسازی و بستن Statement، پیمایش و آزادسازی ResultSet و همچنین ترجمه خطاهای دیتابیس را به عهده میگیرد؛ در نتیجه توسعهدهنده صرفاً بر نوشتن دستور SQL و نگاشت دادهها متمرکز میشود.
- مشکل اصلی ساختار SQLException در JDBC سنتی چیست و اسپرینگ چگونه آن را حل کرده است؟
این خطا یک Checked Exception است که توسعهدهنده را مجبور به نوشتن catch میکند، در حالی که اغلب خطاهای دیتابیسی نظیر قطعی اتصال یا خطای نگارشی در SQL در سطح همان متد قابل رفع نیستند؛ اسپرینگ این خطاها را به مجموعهای از ساختارهای DataAccessException از نوع Unchecked ترجمه میکند.
- تفاوت سطح انتزاع JDBC با JPA چیست؟
رویکرد JDBC بر پایه اجرای مستقیم دستورات SQL و نگاشت دستی ردیفها کار میکند، در حالی که JPA یک لایه انتزاع بالاتر بر پایه ORM است که اشیاء جاوا را مستقیماً به ساختار جداول متصل کرده و نیاز به نوشتن کوئریهای تکراری را به حداقل ممکن میرساند.
- چرا وجود فیلدهای شناسه و برچسب زمانی در Domain Objectها برای Persistence ضروری است؟
فیلد id هویت یکتای هر نمونه در جدول پایگاه داده را مشخص میکند و فیلدهای زمانی نظیر createdAt برای ردگیری دقیق لحظه ایجاد و ثبت دادهها، ممیزی سیستم و مرتبسازی رکوردهای پایگاه داده مورد استفاده قرار میگیرند.
