Men Elleanor Kerrining "REST haqida umumiy ma'lumot" deb nomlangan turkum maqolalari menga juda yoqqanligini aytishdan boshlaylik . Mana ushbu maqolalarga havolalar:
- REST haqida umumiy fikr. 1-qism: REST nima
- REST haqida umumiy fikr. 2-qism: Mijoz va server o'rtasidagi aloqa
- REST haqida umumiy fikr. 3-qism: Spring Boot-da RESTful xizmatini yaratish
<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, .sql 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!
GO TO FULL VERSION