اجازه دهید با گفتن این نکته شروع کنم که از سری مقالات النور کری به نام «نمای کلی REST» بسیار لذت بردم. در اینجا پیوندهایی به این مقالات وجود دارد:
- نمای کلی REST. بخش 1: REST چیست
- نمای کلی REST. بخش 2: ارتباط بین مشتری و سرور
- نمای کلی REST. قسمت 3: ایجاد یک سرویس RESTful در Spring Boot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
برای ایجاد یک کنترلر REST:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
برای سرور Tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
برای PostgreSQL:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
حالا که pom.xml را مرتب کردیم، به پوشه منابع رفته و فایل application.properties را به صورت زیر پر می کنیم:
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
در اینجا URL پایگاه داده خود را وارد کردیم، لاگین و رمز عبور آن را ارائه کردیم، درایور PostgreSQL را ثبت کردیم، نشان دادیم که از نوع داده PostgreSQL استفاده خواهیم کرد و گویش را برای Hibernate مشخص کردیم. سپس، اجازه دهید یک دایرکتوری جدید به نام پایگاه داده در همان پوشه منابع ایجاد کنیم . در این دایرکتوری ما 2 فایل ایجاد خواهیم کرد: initDB.sql و populateDB.sql . اولی مسئول ایجاد جداول و دومی مسئول پر کردن آنها در ابتدا خواهد بود. بیایید initDB.sql را باز کنیم و یک نوار سبز رنگ در بالا ببینیم که گویش SQL پیکربندی نشده است . این بدان معنی است که ما یک گویش SQL برای پروژه خود انتخاب نکرده ایم (و چندین مورد از آنها وجود دارد). در سمت راست همان نوار روی کتیبه Change dialect to… کلیک کنید . در پنجره پاپ آپ روی Project SQL Dialect کلیک کنید و از آنجایی که پایگاه داده ما PostgreSQL است ، لهجه ای به همین نام را انتخاب می کنیم. روی OK کلیک کنید بیایید به تکمیل فایل های .sql خود ادامه دهیم . بیایید ابتدا فایل initDB.sql را پر کنیم :
CREATE TABLE IF NOT EXISTS clients
(
id BIGSERIAL PRIMARY KEY ,
name VARCHAR(200) NOT NULL ,
email VARCHAR(254) NOT NULL ,
phone VARCHAR(20) NOT NULL
);
اگر بعد از پر کردن فایل، کلماتی غیر از کلاینتها با فونت سفید نوشته شدهاند، داخل متن کلیک راست کرده و دوباره Change Dialect --> PostgreSQL را انتخاب کنید . همانطور که احتمالا قبلاً متوجه شده اید، این همان داده هایی است که هنگام ایجاد جدول آزمایشی به صورت دستی پر کردیم. در اینجا آنها به گویش PostgreSQL زبان SQL فرمت می شوند. حالا بیایید فایل populateDB.sql را پر کنیم :
INSERT INTO clients VALUES
(1, 'Vassily Petrov', 'vpetrov@jr.com', '+7 (191) 322-22-33)'),
(2, 'Pjotr Vasechkin', 'pvasechkin@jr.com', '+7 (191) 223-33-22)');
اگر نام جدول مشتریان شما با حروف قرمز نوشته شده باشد، اشکالی ندارد. نکته اینجاست که ما هنوز این جدول را ایجاد نکرده ایم و IDEA هنوز آن را شناسایی نکرده است. برای ایجاد و پر کردن جدول، باید به فایل application.properties برگردیم و سه خط زیر را در آنجا اضافه کنیم:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
در این خطوط می گوییم که می خواهیم پایگاه داده را به صورت برنامه نویسی مقداردهی اولیه کنیم و مشخص کنیم که کدام فایل ها باید برای این کار استفاده شوند. بعد، به روش اصلی برنامه ما بروید و آن را اجرا کنید . پس از آن، به pgAdmin --> Servers --> PostgreSQL 12 --> Databases --> customers --> Schemas --> public بروید، روی " Tables "، " Update " کلیک راست کنید . اگر همه چیز به خوبی پیش رفت، جدول مشتریانی که ایجاد کردیم را می بینیم . پس از آن، به فایل application.properties برگردید و در خط کامنت بگذارید.
spring.datasource.data=classpath*:database/populateDB.sql
مانند زیر:
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
#spring.datasource.data=classpath*:database/populateDB.sql
اگر این کار را انجام ندهیم، دفعه بعد که برنامه را اجرا می کنیم، خطای زیر را دریافت می کنیم: org.postgresql.util.PSQLException: ERROR: یک مقدار کلید تکراری محدودیت منحصر به فرد "clients_pkey" را نقض می کند . این به این دلیل اتفاق می افتد که ما قبلاً فیلدهایی را با شناسه 1 و 2 در جدول پر کرده ایم (حتی در اولین راه اندازی). در جدولی که ایجاد کردیم، فیلد id به صورت bigserial مشخص شده است که با نوع Long در جاوا مطابقت دارد. با این حال، در برنامه ما نوع این فیلد عدد صحیح است . تصمیم گرفتم نحوه استفاده از Long (BIGSERIAL) را نشان دهم زیرا محدوده بزرگتری نسبت به عدد صحیح دارد. واقعیت این است که در جداول، فیلدی که بهعنوان کلید اصلی تعیین میشود، میتواند نه تنها برای ذخیره شناسههای کاربر ، بلکه برای ذخیره فهرستهای طیف گستردهای از دادهها استفاده شود و تعداد چنین رکوردهایی میتواند از حداکثر مقدار صحیح بیشتر شود. به عنوان مثال، اگر برنامه ما در هر ثانیه مقداری اندازه گیری کند و داده ها را در جدول بنویسد. برای اینکه کلاسهایمان را برای استفاده از نوع داده Long بازنویسی کنیم، باید در همه کلاسها و متدهایی که از فیلد id استفاده میکنند، نوع را از Integer به Long تغییر دهیم . ما این کار را انجام نخواهیم داد، زیرا برنامه در ابتدا توسط نویسنده برای نوع id Integer نوشته شده است، به این معنی که این امر تا حدی منطقی است. برای ادامه، اجازه دهید یک بار دیگر جدول مشتریانی که ایجاد کردهایم را از پایگاه داده خود حذف کنیم، اما اکنون سعی میکنیم این کار را بهجای دستی به صورت برنامهنویسی انجام دهیم. برای انجام این کار، کد ما را در فایل initDB.sql کامنت کرده و یک خط اضافه کنید:
-- CREATE TABLE IF NOT EXISTS clients
-- (
-- id BIGSERIAL PRIMARY KEY ,
-- name VARCHAR(200) NOT NULL ,
-- email VARCHAR(254) NOT NULL ,
-- phone VARCHAR(20) NOT NULL
-- );
DROP TABLE IF EXISTS clients
بیایید برنامه را راه اندازی کنیم، به pgAdmin برویم، روی " Tables " (در پایگاه داده مشتریان ما ) - -> " Update " راست کلیک کرده و خواهیم دید که جدول ما ناپدید شده است. NB! هنگام استفاده از این دستور مراقب باشید، در غیر این صورت خطر از دست دادن تمام داده هایی که در جدول خود داشتید! بیایید به فایل initDB.sql برگردیم و آن را به صورت زیر بازنویسی کنیم:
CREATE TABLE IF NOT EXISTS clients
(
id SERIAL PRIMARY KEY ,
name VARCHAR(200) NOT NULL ,
email VARCHAR(254) NOT NULL ,
phone VARCHAR(50) NOT NULL
);
در اینجا نوع شناسه را به SERIAL تغییر داده ایم که با نوع عدد صحیحی که برای فیلد id در برنامه خود استفاده می کنیم مطابقت دارد. علاوه بر این، حداکثر طول فیلد گوشی افزایش یافته است تا بتوانیم آزادانه از فاصله ها و کاراکترهای خاص (پرانتز، خط تیره و ...) در نوشتن آن استفاده کنیم. حداکثر تعداد ارقام در یک شماره تلفن در حال حاضر 18 رقم است (اگر حافظه من به درستی استفاده کند). برای اطمینان، اندازه را 50 کاراکتر تنظیم کردم. بیایید به فایل application.properties برویم و خط را از نظر خارج کنیم:
spring.datasource.data=classpath*:database/populateDB.sql
بیایید برنامه خود را اجرا کنیم، به pgAdmin برویم، بررسی کنیم که جدول ما ایجاد شده است و در این خط نظر بدهیم.
#spring.datasource.data=classpath*:database/populateDB.sql
این جایی است که احتمالاً قسمت اول مقاله را تمام می کنم. امیدوارم خوشتون بیاد، نظرتون رو بنویسید (حتی اگر دوستش نداشتید). در قسمت دوم، کلاسهایمان را بازنویسی میکنیم تا بتوانند با پایگاههای داده واقعی کار کنند. ادامه: افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot. قسمت 2 UPD با تشکر از مدیران برای تصحیح تصاویر و قالب بندی متن من!
GO TO FULL VERSION