JavaRush /وبلاگ جاوا /Random-FA /افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring ...
Artur
مرحله
Tallinn

افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot. قسمت 1

در گروه منتشر شد
اجازه دهید با گفتن این نکته شروع کنم که از سری مقالات النور کری به نام «نمای کلی REST» بسیار لذت بردم. در اینجا پیوندهایی به این مقالات وجود دارد: افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 1به طور کلی تصمیم گرفتم این آزادی را به دست بگیرم و کمی به آنها اضافه کنم. یعنی نحوه ایجاد پایگاه داده و اتصال آن به این برنامه را بگویید. از کجا شروع کنیم؟ احتمالا از خود دیتابیس. من تصمیم گرفتم از PostgreSQL استفاده کنم زیرا رابط کاربری کاربرپسند مدیریت آن را دوست داشتم. ابتدا باید نصب کننده PostgreSQL را دانلود کنیم، به عنوان مثال از اینجا: دانلود پایگاه داده PostgreSQL من روند نصب کامل را شرح نمی دهم، زیرا ممکن است بسته به سیستم عامل شما متفاوت باشد. با این حال، توجه می کنم که در این فرآیند باید یک رمز عبور مدیر برای نقش پیش فرض postgres (حساب) ایجاد کنید و آن را 2 بار وارد کنید. برای سادگی، رمز عبور را روی 123 قرار دادم . البته در پروژه های واقعی باید چیز پیچیده تری ارائه کرد. افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 2بعد، برنامه نصب از شما می خواهد که یک پورت را انتخاب کنید؛ من آن را در مقدار پیش فرضش گذاشتم. افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 3محلی نیز به عنوان پیش فرض باقی مانده است. افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 4نصب شد، سپس رابط مدیر pgAdmin را باز کنید . یک مرورگر با یک پنجره پاپ آپ باز می شود که در آن از ما خواسته می شود رمز عبور ایجاد شده قبلی را وارد کنیم. افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 5اکنون باید زبان رابط را تنظیم کنیم. برای انجام این کار، روی Configure pgAdmin --> Miscellaneous --> User Language کلیک کنید ، زبان مورد نظر را انتخاب کنید --> Save را انتخاب کنید و صفحه مرورگر را دوباره بارگیری کنید . افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 6در گوشه سمت چپ بالای صفحه، روی Server کلیک کنید، پنجره " اتصال به سرور " ظاهر می شود . رمز عبور ما را دوباره وارد کنید و تیک Save Password را بزنید تا هر بار آن را وارد نکنید. افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 7ما می‌توانیم به استفاده از نقش مدیر برای همه پایگاه‌های داده ادامه دهیم، اما بهتر است یک نقش جدید ایجاد کنیم، زیرا ممکن است پایگاه‌های داده و برنامه‌های زیادی داشته باشیم که از آنها استفاده می‌کنند. برای انجام این کار، در گوشه سمت چپ بالا، روی PostgreSQL 12 --> RMB در Login/Group Roles --> Create --> Login/Group Role افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 8 در پنجره پاپ آپ، در تب General ، کلیک کنید. نام نقش اسم نقش رو گذاشتم . افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 9در تب " تعریف " ما یک رمز عبور جدید ایجاد می کنیم، من 123 را گذاشتم تا گیج نشوم. افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 10به تب " حقوق " بروید و تمام موارد لازم را علامت بزنید. من همه موارد را روی " بله " تنظیم کرده ام. روی " ذخیره " کلیک کنید افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 11ما به ایجاد یک پایگاه داده ادامه می دهیم. روی "Databases" --> Create --> Database کلیک راست کنید افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 12در تب " General " نام پایگاه داده را ایجاد کنید. بگذارید مثلاً مشتری باشد . مالک را به root اختصاص می دهیم که در مرحله قبل او را ایجاد کردیم. افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 13در "تعریف » بررسی کنید که مجموعه کدگذاری UTF8 داریم . روی « ذخیره » کلیک کنید. تمام است، پایگاه داده ما ایجاد شده است (فعلا خالی است). افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 14در این مرحله می توانیم با pgAdmin پایان دهیم، زیرا ... ما جداول را به صورت برنامه‌ریزی می‌سازیم، اما در هر صورت، نحوه ایجاد جدول را به صورت دستی به شما نشان خواهم داد. مشتریان --> طرحواره ها --> درخت عمومی را گسترش دهید . روی Tables --> Create --> Table کلیک راست کنید . افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 15یک پنجره پاپ آپ باز می شود. در تب General ، نامی را به جدول خود اختصاص می دهیم، به عنوان مثال test_table ، و root را به عنوان مالک اختصاص می دهیم . افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 16به تب “ Columns ” بروید، روی “ + ” کلیک کنید تا یک ستون جدید ایجاد کنید. نام “ id ” و نوع داده bigserial را وارد کنید ، که معادل نوع Long در جاوا است، اما با افزایش خودکار (هنگام افزودن رکورد جدید، id به طور خودکار یک عدد افزایش می‌یابد). ما غیر NULL را به عنوان " بله " علامت گذاری می کنیم، کلید اصلی نیز " بله " است. ستون های « نام »، « ایمیل » و « تلفنافزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 17 » را به همین ترتیب ایجاد می کنیم . ما نویسه نوع داده را متغیر انتخاب می کنیم ، این مربوط به نوع رشته است ، اما به شما امکان می دهد حداکثر طول را تنظیم کنید. حداکثر طول نام را 200 کاراکتر برای پر کردن نام کامل قرار می دهیم. در یک ستون حداکثر طول ایمیل را 254 کاراکتر تنظیم کردیم. چرا ایمیل چنین حداکثر طولی دارد را می توان در اینجا یافت . برای یک شماره تلفن، 20 کاراکتر را انتخاب کنید، این باید کافی باشد. کمی در مورد شماره تلفن: تصورات نادرست برنامه نویسان در مورد شماره تلفن (Habr) اگر بخواهیم این داده ها اجباری باشد، غیر NULL را در همه ستون ها به عنوان " بله " علامت گذاری می کنیم. روی « ذخیره » کلیک کنید. همین است، جدول ایجاد شده است. برای حذف جدول تست ما، روی آن (در درخت) کلیک راست کرده و " حذف " را کلیک کنید، زیرا ما دیگر به آن نیاز نداریم، زیرا از برنامه خود جداول ایجاد خواهیم کرد. pgAdmin را ببندید و به برنامه ما بروید. بیایید IDEA را با پروژه خود باز کنیم. روی Database در ستون سمت راست رابط کلیک کنید ، روی " + " کلیک کنید تا پایگاه داده ما اضافه شود. منبع داده بعدی --> PostgreSQL . در پنجره پاپ آپ، نقش root را که قبلا ایجاد کردیم و رمز عبور خود را در قسمت User وارد کنیدافزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 18افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 19123 در قسمت رمز عبور . در قسمت Database نام پایگاه داده مشتریان خود را می نویسیم . دکمه Test Connection را فشار می دهیم و اگر علامت سبز رنگ زیر آن دیدیم، همه چیز مرتب است و دکمه OK را فشار می دهیم . تمام شد، ما به پایگاه داده وصل شدیم، حالا به فایل pom.xmlافزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 20 می رویم و وابستگی ها را اضافه می کنیم. برای کار با پایگاه داده ORM :
<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 کلیک کنید افزودن پایگاه داده PostgreSQL به سرویس RESTful در Spring Boot.  قسمت 1 - 21بیایید به تکمیل فایل های .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 با تشکر از مدیران برای تصحیح تصاویر و قالب بندی متن من!
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION