JavaRush /Java blogi /Random-UZ /Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar b...
Artur
Daraja
Tallinn

Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish. 1-qism

Guruhda nashr etilgan
Men Elleanor Kerrining "REST haqida umumiy ma'lumot" deb nomlangan turkum maqolalari menga juda yoqqanligini aytishdan boshlaylik . Mana ushbu maqolalarga havolalar: Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-1-qismUmuman olganda, men erkinlikni olishga va ularga bir oz qo'shishga qaror qildim. Ya'ni, ma'lumotlar bazasini qanday yaratishni va uni ushbu ilovaga ulashni ayting. Qayerdan boshlash kerak? Ehtimol, ma'lumotlar bazasining o'zidan. Men PostgreSQL- dan foydalanishga qaror qildim , chunki uning foydalanuvchilarga qulay boshqaruv interfeysi yoqdi. Birinchidan, biz PostgreSQL o'rnatuvchisini yuklab olishimiz kerak, masalan, bu yerdan: PostgreSQL ma'lumotlar bazasini yuklab olish Men to'liq o'rnatish jarayonini tasvirlamayman, chunki u sizning operatsion tizimingizga qarab farq qilishi mumkin. Ammo shuni ta'kidlaymanki, bu jarayonda siz standart postgres roli (hisob qaydnomasi) uchun administrator parolini o'ylab topishingiz va uni 2 marta kiritishingiz kerak bo'ladi. Oddiylik uchun parolni 123 ga o'rnatdim . Albatta, haqiqiy loyihalarda murakkabroq narsani o'ylab topish kerak. Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-2 qismKeyin o'rnatish dasturi portni tanlashni taklif qiladi; men uni standart qiymatida qoldirdim. Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-3 qismMahalliy til ham birlamchi sifatida qoldirildi. Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-4 qismO'rnatilgan, keyin administrator interfeysini oching pgAdmin . Brauzer qalqib chiquvchi oyna bilan ochiladi, unda bizdan avval yaratilgan parolni kiritish so'raladi. Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-5 qismEndi biz interfeys tilini o'rnatishimiz kerak. Buning uchun pgAdminni sozlash --> Turli --> Foydalanuvchi tili ni bosing , kerakli tilni tanlang --> Saqlash va brauzer sahifasini qayta yuklang . Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-6 qismSahifaning yuqori chap burchagida Server ni bosing, “ Serverga ulanish ” oynasi paydo bo'ladi . Parolimizni yana kiriting va har safar kiritmaslik uchun Parolni saqlash katagiga belgi qo'ying. Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-7 qismBiz barcha ma'lumotlar bazalari uchun administrator rolidan foydalanishni davom ettirishimiz mumkin, ammo yangi rol yaratganimiz ma'qul, chunki bizda ko'plab ma'lumotlar bazalari va ulardan foydalanadigan ko'plab dasturlar bo'lishi mumkin. Buning uchun yuqori chap burchakda PostgreSQL 12 --> Kirish/Guruh rollarida RMB --> Yaratish --> Kirish/Guruh roli-ni Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-8 qism bosing Qalqib chiquvchi oynada “ Umumiy ” yorlig'ida, rolning nomi. Men rolni ildiz deb nomladim . Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-9 qism" Ta'rif " yorlig'ida biz yangi parol yaratamiz, chalkashmaslik uchun 123 ni qoldirdim . " HuquqlarSpring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-10-qism " yorlig'iga o'ting va barcha kerakli narsalarni belgilang. Men barcha elementlarni " HA " ga qo'ydim . " Saqlash " tugmasini bosing Biz ma'lumotlar bazasini yaratishga o'tamiz. "Ma'lumotlar bazalari" ni o'ng tugmasini bosing --> Yaratish --> Ma'lumotlar bazasi " Umumiy " yorlig'ida ma'lumotlar bazasi nomini yarating. Bu, masalan, mijozlar bo'lsin . Biz egasini tayinlaymiz root , biz oldingi bosqichda yaratganmiz. Ustida "Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-11-qism Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-12-qismSpring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-13-qismTa'rif » bizda UTF8 kodlash to'plami mavjudligini tekshiring . " Saqlash " tugmasini bosing. Mana, bizning ma'lumotlar bazamiz yaratildi (hozircha bo'sh). Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-14-qismShu nuqtada biz pgAdmin bilan yakunlashimiz mumkin, chunki ... Biz jadvallarni dasturiy tarzda yaratamiz, lekin har qanday holatda, men sizga jadvalni qo'lda qanday yaratishni ko'rsataman. Mijozlarni kengaytiring --> Sxemalar --> umumiy daraxt . Jadvallar --> Yaratish --> Jadval-ni o'ng tugmasini bosing . Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-15-qismQalqib chiquvchi oyna ochiladi. " Umumiy " yorlig'ida biz jadvalimizga nom beramiz, masalan test_table , va ildizni egasi sifatida belgilaymiz . " UstunlarSpring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-16-qism " yorlig'iga o'ting , yangi ustun yaratish uchun " + " tugmasini bosing . “ Id ” nomini va katta seriyali ma’lumotlar turini kiriting, bu Java’dagi Long turiga teng , lekin avtomatik o‘sish bilan (yangi yozuv qo‘shilganda id avtomatik ravishda bittaga ortadi). Biz NULL bo'lmaganniHa ” deb belgilaymiz, asosiy kalit ham “ Ha ”dir. Xuddi shu tarzda " ism ", " elektron pochta " va " telefon " ustunlarini yaratamiz . Biz ma'lumotlar turini tanlaymiz belgi o'zgaruvchan , bu String turiga mos keladi , lekin maksimal uzunlikni o'rnatishga imkon beradi. To'liq ismni to'ldirish uchun nomning maksimal uzunligini 200 belgiga qo'ydik . bitta ustunda. Biz maksimal elektron pochta uzunligini 254 belgiga o'rnatdik . Nima uchun elektron pochta bunday maksimal uzunlikka ega, bu erda topish mumkin . Telefon raqami uchun 20 ta belgini tanlang, bu etarli bo'lishi kerak. Telefon raqamlari haqida bir oz: Dasturchilarning telefon raqamlari haqidagi noto'g'ri tushunchalari (Habr) Agar biz ushbu ma'lumotlar majburiy bo'lishini xohlasak, barcha ustunlarda NULL bo'lmaganni " Ha " deb belgilaymiz. " Saqlash " tugmasini bosing. Hammasi, jadval yaratildi. Sinov jadvalimizni o'chirish uchun uni (daraxtda) sichqonchaning o'ng tugmasi bilan bosing va “ o'chirish ”, chunki Bizga endi kerak emas, chunki biz dasturimizdan jadvallar yaratamiz. pgAdmin-ni yoping va dasturimizga o'ting. Keling, IDEA ni loyihamiz bilan ochaylik. Interfeysning o'ng ustunidagi Ma'lumotlar bazasini bosing , ma'lumotlar bazasini qo'shish uchun " + " tugmasini bosing. Keyingi ma'lumotlar manbai -> PostgreSQL . Qalqib chiquvchi oynada Foydalanuvchi maydoniga biz avval yaratgan ildiz rolini va parolimizni kiritingSpring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-17-qismSpring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-18-qismSpring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-19-qism123 parol maydonida . Ma'lumotlar bazasi maydoniga mijozlarimizning ma'lumotlar bazasi nomini yozamiz . Biz tugmachani bosamiz ulanishni sinab ko'ring va agar uning ostida yashil tasdiq belgisini ko'rsak, unda hamma narsa tartibda va biz tugmani bosamiz OK . Hammasi tugadi, biz ma'lumotlar bazasiga ulandik, endi pom.xmlSpring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-20-qism fayliga o'tamiz va bog'liqliklarni qo'shamiz. ORM ma'lumotlar bazasi bilan ishlash uchun :
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
REST kontroller yaratish uchun:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Tomcat serveri uchun:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
PostgreSQL uchun:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
Endi biz pom.xml ni saralab oldik, keling, resurslar jildiga o'tamiz va application.properties faylini quyidagicha to'ldiramiz :
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
Bu yerda biz maʼlumotlar bazasining URL manzilini kiritdik, unga login va parolni taqdim etdik, PostgreSQL uchun drayverni roʻyxatdan oʻtkazdik, PostgreSQL maʼlumotlar turidan foydalanishimizni koʻrsatdik va Hibernate uchun dialektni belgilab oldik. Keyinchalik, xuddi shu manbalar papkasida ma'lumotlar bazasi deb nomlangan yangi katalog yarataylik . Ushbu katalogda biz 2 ta fayl yaratamiz: initDB.sql va populateDB.sql . Birinchisi jadvallarni yaratish uchun javobgar bo'ladi, ikkinchisi ularni dastlab to'ldirish uchun javobgar bo'ladi. Keling, initDB.sql ni ochamiz va tepada SQL dialekti sozlanmagan degan yashil chiziqni ko'ramiz . Bu bizning loyihamiz uchun SQL lahjasini tanlamaganimizni anglatadi (va ularning bir nechtasi bor). Xuddi shu chiziqning o'ng tomonidagi " Dalektni o'zgartirish ..." yozuvi ustiga bosing . Qalqib chiquvchi oynada Project SQL Dialect-ni bosing va bizning ma'lumotlar bazasi PostgreSQL bo'lgani uchun biz bir xil nomdagi dialektni tanlaymiz. OK tugmasini bosing Keling, .sqlSpring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish.  1-21-qism fayllarimizni to'ldirishga o'tamiz . Avval initDB.sql faylini to'ldiramiz :
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
);
Agar faylni to'ldirgandan so'ng, mijozlardan boshqa so'zlar oq shriftda yozilgan bo'lsa, matn ichida sichqonchaning o'ng tugmachasini bosing va Dialektni o'zgartirish -> PostgreSQL-ni yana tanlang . Siz allaqachon tushunganingizdek, bu test jadvalini qo'lda yaratishda biz to'ldirgan ma'lumotlardir. Bu erda ular SQL tilining PostgreSQL lahjasida formatlangan. Endi populateDB.sql faylini to'ldiramiz :
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)');
Agar sizning mijozlar jadvalingiz nomi qizil harflar bilan yozilgan bo'lsa, unda yaxshi. Gap shundaki, biz hali bu jadvalni yaratmaganmiz va IDEA uni hali tanimaydi. Jadvalni yaratish va to'ldirish uchun biz application.properties fayliga qaytishimiz va u erga quyidagi uchta qatorni qo'shishimiz kerak:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Ushbu satrlarda biz ma'lumotlar bazasini dasturiy ravishda ishga tushirishni xohlaymiz va buning uchun qaysi fayllardan foydalanish kerakligini ko'rsatamiz. Keyinchalik, dasturimizning asosiy usuliga o'ting va uni ishga tushiring . Shundan so'ng, pgAdmin --> Serverlar --> PostgreSQL 12 --> Ma'lumotlar bazalari --> mijozlar --> Sxemalar --> ommaviy ga o'ting , " Jadvallar ", " Yangilash " ni o'ng tugmasini bosing . Agar hamma narsa yaxshi bo'lsa, biz yaratgan mijozlar jadvalini ko'ramiz . Shundan so'ng, application.properties fayliga qayting va qatorni sharhlang.
spring.datasource.data=classpath*:database/populateDB.sql
quyidagi kabi:
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
Agar biz buni qilmasak, keyingi safar dasturni ishga tushirganimizda quyidagi xatoni olamiz: org.postgresql.util.PSQLException: XATO: Ikki nusxadagi kalit qiymati "clients_pkey" noyob cheklovini buzadi . Buning sababi, biz jadvaldagi id 1 va 2 maydonlarni allaqachon to'ldirganmiz (hatto birinchi ishga tushirish paytida ham). Biz yaratgan jadvalda id maydoni Java tilidagi Long turiga mos keladigan bigserial sifatida ko'rsatilgan . Biroq, bizning dasturimizda bu maydonning turi Integer . Men Long (BIGSERIAL) dan qanday foydalanishni ko'rsatishga qaror qildim, chunki u Integerga qaraganda kattaroq diapazonga ega. Gap shundaki, jadvallarda birlamchi kalit sifatida belgilangan maydon nafaqat foydalanuvchi identifikatorlarini , balki turli xil ma'lumotlarning indekslarini saqlash uchun ham ishlatilishi mumkin va bunday yozuvlar soni maksimal Integer qiymatidan oshishi mumkin. Misol uchun, agar dasturimiz har soniyada ba'zi o'lchovlarni olib, ma'lumotlarni jadvalga yozsa. Long ma'lumotlar turidan foydalanish uchun sinflarimizni qayta yozish uchun biz id maydonidan foydalanadigan barcha sinflar va usullarda turni Integerdan Longga o'zgartirishimiz kerak . Biz buni qilmaymiz, chunki dastur dastlab muallif tomonidan id Integer turi uchun yozilgan, demak, bu qandaydir ma'noga ega. Davom etish uchun biz yaratgan mijozlar jadvalini yana bir bor maʼlumotlar bazasidan olib tashlaymiz, ammo endi biz buni qoʻlda emas, balki dasturiy tarzda bajarishga harakat qilamiz. Buni amalga oshirish uchun initDB.sql faylidagi kodimizni sharhlang va bitta qator qo'shing:
-- 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
Keling, dasturni ishga tushiramiz, pgAdmin ga o'tamiz, " Jadvallar " ( mijozlarimiz ma'lumotlar bazasida ) - -> " Yangilash " ni o'ng tugmasini bosing va biz jadvalimiz yo'qolganini ko'ramiz. NB! Ushbu buyruqdan foydalanganda ehtiyot bo'ling, aks holda jadvalingizdagi barcha ma'lumotlarni yo'qotish xavfi bor! Keling, initDB.sql fayliga qaytaylik va uni quyidagicha qayta yozamiz:
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
);
Bu yerda biz identifikator turini SERIAL ga o‘zgartirdik , bu biz dasturimizdagi id maydoni uchun foydalanayotgan Integer turiga mos keladi. Bundan tashqari, telefon maydonining maksimal uzunligi biz uni yozishda bo'sh joylar va maxsus belgilardan (qavslar, tire va boshqalar) erkin foydalanishimiz uchun oshirildi. Telefon raqamidagi raqamlarning maksimal soni hozirda 18 ta raqamni tashkil etadi (agar xotiram menga to'g'ri xizmat qilsa). Ishonch hosil qilish uchun o'lchamni 50 belgiga qo'ydim. Keling, application.properties fayliga o'tamiz va qatorni izohdan chiqaramiz:
spring.datasource.data=classpath*:database/populateDB.sql
Keling, dasturimizni ishga tushiramiz, pgAdmin-ga o'tamiz, jadvalimiz yaratilganligini tekshiramiz va ushbu qatorni sharhlaymiz.
#spring.datasource.data=classpath*:database/populateDB.sql
Bu erda men maqolaning birinchi qismini tugataman. Umid qilamanki, sizga yoqadi, sharhlar yozing (sizga yoqmagan bo'lsa ham). Ikkinchi qismda biz sinflarimizni haqiqiy ma'lumotlar bazalari bilan ishlashlari uchun qayta yozamiz. Davomi: Spring Boot-da RESTful xizmatiga PostgreSQL ma'lumotlar bazasini qo'shish. 2-qism UPD Rasmlarim va matn formatini tuzatgani uchun moderatorlarga rahmat!
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION