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

JdbcTemplate & SQL Scripts(data | schema.sql) | تنظیم دیتابیس و SQL در اسپرینگ

00:24:46

توضیحات جلسه

🎥 این ویدیو قسمت صد و شانزدهم از بوت‌کمپ رایگان جاوا و پانزدهمین جلسه از پلی‌لیست تخصصی آموزش فریم‌ورک اسپرینگ است. 📚 در این جلسه به صورت کاملاً عملی و پروژه‌محور وارد پیاده‌سازی لایه دیتابیس در پروژه Taco Cloud می‌شویم و پیکربندی ابزارهای مدیریت داده را جلو می‌بریم. در این ویدیو ابتدا با نحوه راه‌اندازی و کانفیگ JdbcTemplate در پروژه آشنا می‌شویم. سپس دیتابیس سبک و درون‌حافظه‌ای H2 Database را اضافه می‌کنیم و نحوه تنظیم H2 Web Console را بررسی می‌کنیم تا بتوانیم جداول را به‌صورت گرافیکی مانیتور کنیم. در ادامه ساختار اسکیما (Schema) دیتابیس پروژه تاکو را تعریف کرده و با استفاده از دو فایل کلیدی schema.sql برای ساخت جداول و data.sql برای مقداردهی اولیه داده‌ها هنگام بالا آمدن (Startup) برنامه، پروژه را آماده ذخیره‌سازی داده‌های واقعی می‌کنیم. در این جلسه یاد می‌گیریم: ⚙️ کانفیگ و اضافه کردن JdbcTemplate به پروژه تاکو 🗄️ پیکربندی دیتابیس H2 و دسترسی به H2 Console 📐 طراحی و بررسی اسکیمای دیتابیس پروژه تاکو (Taco App Schema) 🏗️ ساخت خودکار جداول دیتابیس در استارتاپ پروژه با schema.sql 📥 مقداردهی و تزریق خودکار داده‌های اولیه برنامه با data.sql 🧠 در پایان نیز یک جمع‌بندی کامل از روند پیاده‌سازی و ارتباط با دیتابیس خواهیم داشت اگر در حال یادگیری پروژه‌محور Spring Boot هستید، این جلسه یکی از مهم‌ترین گام‌ها برای ورود به فاز عملی کار با دیتابیس، ساخت جداول و آماده‌سازی داده‌های اولیه است. 📌یوتیوب: https://youtube.com/@farzadafi 📌آپارت: https://aparat.com/farzadafi 📌وب سایت: https://farzadafi.ir 📌 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi وب سایت: https://farzadafi.ir هر سوالی داشته باشید می‌توانید در گروه بپرسید تا من یا مربی‌های گروه کمکتان کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش کاملاً پروژه‌محور برای یادگیری عمیق جاوا و ورود به بازار کار.

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

مفاهیم کلیدی

  • spring-boot-starter-jdbc

استارتر اختصاصی اسپرینگ بوت جهت اتصال به پایگاه داده با استفاده از JDBC که وابستگی‌های ضروری شامل JdbcTemplate و مدیریت اتصال پیش‌فرض (HikariCP) را به صورت خودکار به Classpath اضافه می‌کند.

  • Embedded Database

پایگاه داده سبک درون‌حافظه‌ای (In-Memory) نظیر H2 که درون چرخه حیات خود نرم‌افزار اجرا می‌شود و داده‌های موقت را در حافظه اصلی ذخیره می‌کند؛ گزینه‌ای سریع و مناسب برای محیط‌های توسعه و تست بدون نیاز به راه‌اندازی سرور مستقل پایگاه داده.

  • H2 Console

یک ابزار مبتنی بر وب برای مشاهده، پیمایش جداول و اجرای مستقیم دستورات SQL روی دیتابیس H2 که با حضور ماژول spring-boot-devtools در آدرس پیش‌فرض /h2-console در دسترس قرار می‌گیرد.

  • Fixed Datasource Name

پیکربندی عمدی نام دیتابیس با غیرفعال‌سازی ویژگی تولید نام تصادفی در تنظیمات نرم‌افزار (spring.datasource.generate-unique-name=false) برای ایجاد یک JDBC URL پایدار و مشخص مانند jdbc:h2:mem:tacocloud جهت اتصال دستی آسان از طریق ابزارهای گرافیکی و کنسول وب.

  • schema.sql

فایل استاندارد اسکریپت SQL که در مسیر ریشه Classpath (شاخه src/main/resources) قرار داده می‌شود و اسپرینگ بوت دستورات ایجاد جداول و ساختار داده‌ها (DDL) موجود در آن را در لحظه راه‌اندازی نرم‌افزار به صورت خودکار روی پایگاه داده اجرا می‌کند.

  • data.sql

فایل استاندارد اسکریپت SQL در مسیر Classpath برای بارگذاری و درج داده‌های اولیه (DML یا Seed Data) که پس از ایجاد ساختار جداول به صورت خودکار توسط اسپرینگ بوت در زمان اجرای برنامه اعمال می‌شود.

  • YAML Configuration

قالب ساختاریافته، سلسله‌مراتبی و با خوانایی بالا جهت نگارش فایل‌های تنظیمات در اسپرینگ بوت (application.yml) به عنوان جایگزینی برای ساختار سنتی کلید-مقدار در فایل‌های application.properties.

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

  • مکانیزم مقداردهی اولیه خودکار ساختار پایگاه داده در Spring Boot چیست؟

اسپرینگ بوت به طور خودکار فایل‌های schema.sql را برای ایجاد و تغییر ساختار جداول و بلافاصله پس از آن فایل data.sql را برای بارگذاری داده‌های پایه در هنگام بارگذاری کانتکست و اتصال به دیتابیس اجرا می‌کند.

  • چرا نام دیتابیس H2 به طور پیش‌فرض در Spring Boot به صورت تصادفی تولید می‌شود و راه تثبیت آن چیست؟

به صورت پیش‌فرض اسپرینگ بوت برای جلوگیری از تداخل کانکشن‌ها نام‌های رندوم می‌سازد؛ اما برای داشتن یک JDBC URL ثابت جهت اتصال کنسول وب، باید ویژگی spring.datasource.generate-unique-name را روی false تنظیم کرده و نام مشخصی با spring.datasource.name معین نمود.

  • تفاوت اصلی فایل‌های schema.sql و data.sql در چرخه اجرای پایگاه داده چیست؟

فایل schema.sql حاوی دستورات تعریف داده (DDL) نظیر CREATE TABLE است و ساختار دیتابیس را پی‌ریزی می‌کند؛ در حالی که data.sql حاوی دستورات دستکاری داده (DML) مانند INSERT است و پس از اجرای فایل شمای پایگاه داده، رکوردهای پیش‌فرض را تزریق می‌نماید.

  • مزیت استفاده از فرمت YAML در مقایسه با properties چیست؟

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

  • آیا دیتابیس درون‌حافظه‌ای H2 برای محیط عملیاتی (Production) مناسب است؟

خیر؛ زیرا ماهیت Embedded و In-Memory آن موجب می‌شود با هر بار خاموش شدن یا ری‌استارت برنامه، کل داده‌ها به طور کامل از بین بروند و همچنین ظرفیت و کارایی مورد نیاز برای بارهای پردازشی سنگین سازمانی را ندارد.

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

  • راه‌اندازی پایگاه داده درون‌حافظه‌ای همراه با ساختار خودکار و اتصال از طریق کنسول H2

در این سناریو، یک دیتابیس درون‌حافظه‌ای با نام ثابت کانفیگ شده و ساختار جداول به همراه رکوردهای پیش‌فرض در هنگام بوت برنامه مقداردهی می‌شوند:

۱. پیکربندی نام پایگاه داده در فایل application.yml:

spring:
  datasource:
    generate-unique-name: false
    name: tacocloud
  h2:
    console:
      enabled: true

۲. تعریف جداول دیتابیس در فایل src/main/resources/schema.sql:

create table if not exists Ingredient (
    id varchar(4) not null primary key,
    name varchar(25) not null,
    type varchar(10) not null
);

۳. درج داده‌های پایه در فایل src/main/resources/data.sql:

insert into Ingredient (id, name, type)
values ('FLTO', 'Flour Tortilla', 'WRAP');
insert into Ingredient (id, name, type)
values ('COTO', 'Corn Tortilla', 'WRAP');
insert into Ingredient (id, name, type)
values ('GRBF', 'Ground Beef', 'PROTEIN');

با اجرای برنامه، اسپرینگ ابتدا ساختار جدول Ingredient را برپا کرده و سپس داده‌های اولیه را در آن درج می‌کند. توسعه‌دهنده می‌تواند با مراجعه به آدرس مرورگر http://localhost:8080/h2-console و درج آدرس اتصال jdbc:h2:mem:tacocloud داده‌ها را مشاهده و بررسی کند.

بیشتر بدانید

  • آدرس مستقیم ورود به دیتابیس در H2 Console

هنگام اتصال به کنسول H2 در مرورگر، فیلد JDBC URL باید دقیقاً مقدار تطبیق داده‌شده با نام کانفیگ، یعنی jdbc:h2:mem:<database_name> باشد و نام کاربری پیش‌فرض معمولاً sa بدون رمز عبور است.

  • تنظیم دامنه وابستگی H2 در بیلد ابزارها

توصیه می‌شود تگ <scope>runtime</scope> برای وابستگی H2 در فایل pom.xml تنظیم شود تا کدهای پروژه در زمان کامپایل به کتابخانه‌های داخلی دیتابیس وابسته نشوند و صرفاً در زمان اجرای برنامه حضور داشته باشند.