İcazə verin, onunla başlayım ki, Elleanor Kerrinin “REST İcmal” adlı məqalə silsiləsi çox xoşuma gəldi . Bu məqalələrə keçidlər:
- REST-ə ümumi baxış. 1-ci hissə: REST nədir
- REST-ə ümumi baxış. 2-ci hissə: Müştəri və server arasında əlaqə
- REST-ə ümumi baxış. Hissə 3: Spring Boot-da RESTful Service yaradılması
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
REST nəzarətçisi yaratmaq üçün:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Tomcat serveri üçün:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
PostgreSQL üçün:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
İndi pom.xml-ni çeşidlədik, gəlin resurslar qovluğuna keçək və application.properties faylını aşağıdakı kimi dolduraq:
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
Burada verilənlər bazamızın URL-ini daxil etdik, onun üçün loqin və parol təqdim etdik, PostgreSQL üçün sürücünü qeydiyyatdan keçirdik, PostgreSQL məlumat növündən istifadə edəcəyimizi bildirdik və Hibernate üçün dialekt təyin etdik. Sonra eyni resurslar qovluğunda verilənlər bazası adlı yeni qovluq yaradaq . Bu kataloqda biz 2 fayl yaradacağıq: initDB.sql və populateDB.sql . Birincisi cədvəllərin yaradılmasına, ikincisi ilkin olaraq onların doldurulmasına cavabdeh olacaq. Gəlin initDB.sql-i açaq və yuxarıda SQL dialektinin konfiqurasiya edilmədiyini bildirən yaşıl çubuq görək . Bu o deməkdir ki, biz layihəmiz üçün SQL ləhcəsini seçməmişik (və onlardan bir neçəsi var). Dəyişiklik dialektini… yazısında eyni zolağın sağ tərəfinə klikləyin . Açılan pəncərədə Project SQL Dialekti üzərinə klikləyin və verilənlər bazamız PostgreSQL olduğundan eyni adlı ləhcəni seçirik. OK düyməsini basın Gəlin .sql fayllarımızı doldurmağa davam edək . Əvvəlcə initDB.sql faylını dolduraq :
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
);
Əgər faylı doldurduqdan sonra müştərilərdən başqa bəzi sözlər ağ şriftlə yazılıbsa, mətnin içinə sağ klikləyin və Dialekti dəyişdir -> PostgreSQL-i yenidən seçin . Yəqin ki, artıq başa düşdüyünüz kimi, bu, test cədvəlini əl ilə yaratarkən doldurduğumuz eyni məlumatlardır. Burada onlar SQL dilinin PostgreSQL dialektində formatlaşdırılıblar. İndi populateDB.sql faylını dolduraq :
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)');
Müştərilər cədvəlinizin adı qırmızı hərflərlə yazılıbsa, eybi yoxdur. Məsələ ondadır ki, biz hələ bu cədvəli yaratmamışıq və IDEA hələ onu tanımır. Cədvəl yaratmaq və doldurmaq üçün biz application.properties faylına qayıtmalı və oraya aşağıdakı üç sətri əlavə etməliyik:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Bu sətirlərdə verilənlər bazasını proqramlı şəkildə işə salmaq istədiyimizi deyirik və bunun üçün hansı faylların istifadə edilməsi lazım olduğunu göstəririk. Sonra, tətbiqimizin əsas metoduna keçin və onu işə salın . Bundan sonra pgAdmin --> Serverlər --> PostgreSQL 12 --> Verilənlər bazaları --> müştərilər --> Sxemlər --> ictimai bölməsinə keçin, " Cədvəllər ", " Yeniləmə " üzərinə sağ klikləyin . Hər şey qaydasındadırsa, onda biz yaratdığımız müştərilər cədvəlini görürük . Bundan sonra, application.properties faylına qayıdın və xətti şərh edin.
spring.datasource.data=classpath*:database/populateDB.sql
aşağıdakı kimi:
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
Bunu etməsək, növbəti dəfə proqramı işə saldıqda aşağıdakı xətanı alacağıq: org.postgresql.util.PSQLException: XƏTA: Dublikat açar dəyəri unikal "clients_pkey" məhdudiyyətini pozur . Bu ona görə baş verir ki, biz artıq cədvəldə id 1 və 2 olan sahələri doldurmuşuq (hətta ilk işə salınma zamanı). Yaratdığımız cədvəldə id sahəsi Java-da Long növünə uyğun gələn bigserial olaraq göstərilmişdir . Bununla belə, proqramımızda bu sahənin növü Tam ədəddir . Mən Longdan (BIGSERIAL) necə istifadə olunacağını göstərmək qərarına gəldim, çünki o, Tam ədəddən daha böyük diapazona malikdir. Fakt budur ki, cədvəllərdə Əsas Açar kimi təyin olunmuş sahə yalnız istifadəçi identifikatorlarını saxlamaq üçün deyil , həm də geniş çeşidli məlumatların indekslərini saxlamaq üçün istifadə edilə bilər və belə qeydlərin sayı maksimum Tam dəyərini keçə bilər. Məsələn, proqramımız hər saniyə bəzi ölçmələr aparırsa və məlumatları cədvələ yazırsa. Uzun məlumat tipindən istifadə etmək üçün siniflərimizi yenidən yazmaq üçün id sahəsindən istifadə edən bütün siniflərdə və metodlarda növü Tam ədəddən Longa dəyişməliyik . Biz bunu etməyəcəyik, çünki proqram ilk olaraq müəllif tərəfindən id Integer növü üçün yazılmışdır, yəni bunun müəyyən mənada olduğunu göstərir. Davam etmək üçün bir daha yaratdığımız müştərilər cədvəlini verilənlər bazamızdan silək, lakin indi bunu əl ilə deyil, proqramla etməyə çalışacağıq. Bunu etmək üçün initDB.sql faylında kodumuzu şərh edin və bir sətir əlavə edin:
-- 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
Proqramı işə salaq, pgAdmin- ə gedək, “ Cədvəllər ” ( müştərilərimizin verilənlər bazasında ) - -> “ Yenilə ” üzərinə sağ klikləyin və cədvəlimizin yoxa çıxdığını görəcəyik. NB! Bu əmrdən istifadə edərkən diqqətli olun, əks halda cədvəlinizdə olan bütün məlumatları itirmək riskiniz var! Gəlin initDB.sql faylına qayıdaq və onu aşağıdakı kimi yenidən yazaq:
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
);
Burada id tipini SERIAL olaraq dəyişdik , bu da proqramımızda id sahəsi üçün istifadə etdiyimiz Tam ədəd növünə uyğun gəlir. Bundan əlavə, telefon sahəsinin maksimum uzunluğu artırılıb ki, biz onun yazısında boşluqlardan və xüsusi simvollardan (mötərizə, tire və s.) sərbəst istifadə edə bilək. Telefon nömrəsindəki rəqəmlərin maksimum sayı hazırda 18 rəqəmdir (yaddaşım mənə düzgün xidmət edirsə). Əmin olmaq üçün ölçüsünü 50 simvol olaraq təyin etdim. application.properties faylına keçək və sətri şərhdən çıxaraq:
spring.datasource.data=classpath*:database/populateDB.sql
Proqramımızı işə salaq, pgAdmin-ə gedək, cədvəlimizin yaradıldığını yoxlayın və bu sətri geri şərh edin.
#spring.datasource.data=classpath*:database/populateDB.sql
Məqalənin birinci hissəsini yəqin ki, burada bitirəcəm. Ümid edirəm bəyənərsiniz, şərh yazın (bəyənməsəniz belə). İkinci hissədə biz siniflərimizi yenidən yazacağıq ki, onlar real verilənlər bazası ilə işləyə bilsinlər. Davam: Spring Boot-da RESTful xidmətinə PostgreSQL verilənlər bazasının əlavə edilməsi. Part 2 UPD Moderatorlara şəkillərimi və mətn formatını düzəltdiklərinə görə təşəkkürlər!
GO TO FULL VERSION