Иҷозат диҳед аз он оғоз кунам, ки ман аз силсилаи мақолаҳои Эллеанор Керрӣ бо номи "Баррасии REST" хеле лаззат бурдам. Инҳо пайвандҳо ба ин мақолаҳо мебошанд:
- Баррасии REST. Қисми 1: REST чист
- Баррасии REST. Қисми 2: Муошират байни муштарӣ ва server
- Баррасии REST. Қисми 3: Эҷоди хидмати RESTful дар Boot Spring
<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>
Барои serverи 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 . Якум барои ташкor ҷадвалҳо, дуюмӣ барои пур кардани онҳо дар аввал масъул хоҳад буд. Биёед initDB.sql-ро кушоем ва сатри сабзро дар боло бубинем, ки мегӯяд, лаҳҷаи SQL танзим нашудааст . Ин маънои онро дорад, ки мо барои лоиҳаи худ лаҳҷаи SQL-ро интихоб накардаем (ва якчандтои онҳо вуҷуд доранд). Дар тарафи рости ҳамон рахи навиштаҷоти Иваз кардани лаҳҷа ба… клик кунед . Дар равзанаи поп-ап, клик кунед лаҳҷаи Project SQL , ва азбаски базаи мо 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
);
Агар пас аз пур кардани файл, баъзе калимаҳои ғайр аз мизоҷ бо ҳуруфи сафед навишта шуда бошанд, дар дохor матн бо тугмаи рости муш клик кунед ва дубора Тағйир додани лаҳҷа -> 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 --> Серверҳо --> PostgreSQL 12 --> Пойгоҳи додаҳо --> муштариён --> Схемаҳо --> оммавӣ гузаред , тугмаи рости мушро пахш кунед " Ҷадвалҳо ", " Навсозӣ ". Агар ҳама чиз хуб бошад, пас мо ҷадвали муштариёнро мебинем, ки мо сохтаем . Пас аз он, ба файли 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: ХАТО: Қимати калиди такрорӣ маҳдудияти ягонаи "clients_pkey" -ро вайрон мекунад . Ин аз он сабаб рӯй медиҳад, ки мо аллакай майдонҳоро бо id 1 ва 2 дар ҷадвал пур кардаем (ҳатто ҳангоми оғози аввал). Дар ҷадвале, ки мо сохтаем, майдони id ҳамчун bigserial нишон дода шудааст , ки ба навъи Long дар Java мувофиқ аст. Аммо, дар барномаи мо навъи ин соҳа Integer аст . Ман қарор додам, ки чӣ тавр истифода бурдани Long (BIGSERIAL) -ро нишон диҳам, зеро он нисбат ба Integer диапазони калонтар дорад. Гап дар он аст, ки дар ҷадвалҳо майдони ҳамчун Калиди ибтидоӣ таъиншуда метавонад на танҳо барои нигоҳ доштани ID-и корбар , балки инчунин барои нигоҳ доштани индексҳои навъҳои гуногуни маълумот истифода шавад ва шумораи чунин сабтҳо метавонад аз арзиши максималии Integer зиёд бошад. Масалан, агар барномаи мо ҳар сония як андоза андозагирӣ кунад ва маълумотро ба ҷадвал нависад. Барои аз нав навиштани синфҳои мо барои истифодаи навъи маълумоти 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 равем , тугмаи рости мушро пахш кунед “ Ҷадвалҳо ” (дар базаи муштариёни мо ) - -> “ Навсозӣ ”, ва мо мебинем, ки ҷадвали мо нопадид шудааст. НБ! Ҳангоми истифодаи ин фармон эҳтиёт шавед, вагарна шумо хавфи гум кардани тамоми маълумоти дар ҷадвал мавҷудбударо доред! Биёед ба файли 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
);
Дар ин ҷо мо навъи id- ро ба 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