JavaRush /Java Blog /Random-TL /Pagdaragdag ng database ng PostgreSQL sa isang RESTful na...
Artur
Antas
Tallinn

Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot. Bahagi 1

Nai-publish sa grupo
Hayaan akong magsimula sa pagsasabi na talagang nasiyahan ako sa serye ng mga artikulo ni Elleanor Kerry na tinatawag na "REST Overview." Narito ang mga link sa mga artikulong ito: Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 1Sa pangkalahatan, nagpasya akong kunin ang kalayaan at magdagdag ng kaunti sa kanila. Ibig sabihin, sabihin kung paano lumikha ng isang database at ikonekta ito sa application na ito. Saan magsisimula? Marahil mula sa database mismo. Nagpasya akong gumamit ng PostgreSQL dahil nagustuhan ko ang user-friendly na admin interface nito. Una, kailangan nating i-download ang PostgreSQL installer, halimbawa mula dito: PostgreSQL Database Download Hindi ko ilalarawan ang kumpletong proseso ng pag-install, dahil maaaring mag-iba ito depende sa iyong OS. Gayunpaman, tandaan ko na sa proseso ay kakailanganin mong makabuo ng password ng administrator para sa default na postgres role (account) at ipasok ito ng 2 beses. Para sa pagiging simple, itinakda ko ang password sa 123 . Siyempre, sa mga totoong proyekto ay kinakailangan na magkaroon ng isang bagay na mas kumplikado. Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 2Susunod, sinenyasan ka ng programa sa pag-install na pumili ng isang port; iniwan ko ito sa default na halaga nito. Iniwan din Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 3ang lokal bilang default. Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 4Naka-install, pagkatapos ay buksan ang interface ng administrator pgAdmin . Magbubukas ang isang browser na may pop-up window kung saan hihilingin sa amin na ipasok ang naunang ginawang password. Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 5Ngayon kailangan nating itakda ang wika ng interface. Upang gawin ito, i-click ang I-configure ang pgAdmin --> Miscellaneous --> Wika ng User , piliin ang gustong wika --> I-save , at i-reload ang pahina ng browser . Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 6Sa kaliwang sulok sa itaas ng page, i-click ang Server , lalabas ang window na “ Kumonekta sa server . Ilagay muli ang aming password at lagyan ng check ang kahon na I-save ang Password upang hindi ito maipasok sa bawat oras. Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 7Maaari naming patuloy na gamitin ang tungkulin ng administrator para sa lahat ng mga database, ngunit ito ay mas mahusay na lumikha ng isang bagong tungkulin, dahil maaaring mayroon kaming maraming mga database at maraming mga programa na gumagamit ng mga ito. Upang gawin ito, sa kaliwang sulok sa itaas, mag-click sa PostgreSQL 12 -> RMB sa Login/Group Roles -> Create -> Login/Group Role Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 8 Sa pop-up window, sa tab na “ General ”, ipasok ang pangalan ng tungkulin. Pinangalanan ko ang papel na ugat . Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 9Sa tab na " Definition " gumawa kami ng bagong password, iniwan ko ang 123 para lang hindi malito. Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 10Pumunta sa tab na " Mga Karapatan " at markahan ang lahat ng kinakailangang item. Itinakda ko ang lahat ng item sa " OO ". I-click ang " I-save " Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 11Nagpapatuloy kami sa paglikha ng isang database. Mag-right-click sa "Mga Database" --> Lumikha --> Database Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 12 Sa tab na " Pangkalahatan ", lumikha ng pangalan ng database. Hayaan ito, halimbawa, mga customer . Itinalaga namin ang may-ari sa root , na ginawa namin sa nakaraang hakbang. Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 13Sa "Depinisyon » tingnan kung mayroon kaming nakatakdang encoding sa UTF8 . I-click ang “ I-save ”. Iyon lang, ang aming database ay nilikha (walang laman sa ngayon). Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 14Sa puntong ito maaari tayong magtapos sa pgAdmin, dahil... Gagawa kami ng mga talahanayan sa programmatically, ngunit, kung sakali, ipapakita ko sa iyo kung paano lumikha ng isang talahanayan nang manu-mano. Palawakin ang mga customer --> Mga Schema --> pampublikong puno . I-right-click ang Mga Talahanayan --> Gumawa --> Talahanayan . Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 15Magbubukas ang isang pop-up window. Sa tab na " Pangkalahatan ", nagtatalaga kami ng pangalan sa aming talahanayan, halimbawa test_table , at nagtatalaga ng root bilang may-ari . Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 16Pumunta sa tab na " Mga Column ", mag-click sa " + " upang lumikha ng bagong column. Ilagay ang pangalan na “ id ” at ang uri ng data na bigserial , na katumbas ng Long type sa Java, ngunit may auto-increment (kapag nagdagdag ng bagong record, awtomatikong tataas ng isa ang id ). Minarkahan namin ang non-NULL bilang " Oo ", ang pangunahing susi ay " Oo " din. Ginagawa namin ang mga column na " pangalan ", " email " at " teleponoPagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 17 " sa parehong paraan . Pinipili namin ang uri ng data ng character na nag-iiba , tumutugma ito sa uri ng String , ngunit nagbibigay-daan sa iyong itakda ang maximum na haba. Itinakda namin ang maximum na haba ng pangalan sa 200 character upang punan ang buong pangalan. sa isang column. Itinakda namin ang maximum na haba ng email sa 254 character. Kung bakit ang email ay may ganoong maximum na haba ay matatagpuan dito . Para sa isang numero ng telepono, pumili ng 20 character, sapat na ito. Kaunti tungkol sa mga numero ng telepono: Mga maling akala ng mga programmer tungkol sa mga numero ng telepono (Habr) Minarkahan namin ang non-NULL sa lahat ng column bilang “ Oo ” kung gusto naming maging mandatory ang data na ito. I-click ang “ I-save ”. Iyon lang, ang talahanayan ay ginawa. Upang tanggalin ang aming talahanayan ng pagsubok, i-right-click ito (sa puno) at " tanggalin ", dahil Hindi na namin ito kailangan, dahil gagawa kami ng mga talahanayan mula sa aming programa. Isara ang pgAdmin at pumunta sa aming programa. Buksan natin ang IDEA sa ating proyekto. I-click ang Database sa kanang column ng interface, i-click ang “ + ” para idagdag ang aming database. Susunod na Pinagmulan ng Data --> PostgreSQL . Sa pop-up window, ipasok sa field ng User ang root role na ginawa namin kanina, at ang aming passwordPagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 18Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 19123 sa field ng password . Sa field ng Database isinulat namin ang pangalan ng database ng aming mga customer . Pinindot namin ang pindutan ng Test Connection , at kung makakita kami ng berdeng marka ng tsek sa ilalim nito, kung gayon ang lahat ay nasa ayos, at pinindot namin ang pindutang OK . Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 20Iyon lang, nakakonekta kami sa database, ngayon ay pumunta tayo sa pom.xml file at magdagdag ng mga dependencies. Upang gumana sa ORM database :
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Para gumawa ng REST controller:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Para sa server ng Tomcat:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Para sa PostgreSQL:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
Ngayong naayos na natin ang pom.xml, pumunta tayo sa folder ng resources at punan ang application.properties file tulad ng sumusunod:
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
Dito namin ipinasok ang URL ng aming database, ibinigay ang login at password para dito, inirehistro ang driver para sa PostgreSQL, ipinahiwatig na gagamitin namin ang uri ng data ng PostgreSQL, at tinukoy ang dialect para sa Hibernate. Susunod, gumawa tayo ng bagong direktoryo na tinatawag na database sa parehong folder ng mapagkukunan . Sa direktoryong ito gagawa kami ng 2 file: initDB.sql at populateDB.sql . Ang una ay magiging responsable para sa paglikha ng mga talahanayan, ang pangalawa ay magiging responsable para sa pagpuno ng mga ito sa simula. Buksan natin ang initDB.sql at makakita ng berdeng bar sa itaas na nagsasabing hindi naka-configure ang SQL dialect . Nangangahulugan ito na hindi kami pumili ng isang SQL dialect para sa aming proyekto (at may ilan sa kanila). Mag-click sa kanang bahagi ng parehong strip sa inskripsyon Change dialect to… . Sa pop-up window, i-click ang Project SQL Dialect , at dahil ang aming database ay PostgreSQL , pipiliin namin ang dialect ng parehong pangalan. I-click ang OK Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot.  Bahagi 1 - 21 Lumipat tayo sa pagpuno ng aming mga .sql file . Punan muna natin ang initDB.sql file :
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
);
Kung, pagkatapos punan ang file, ang ilang mga salita maliban sa mga kliyente ay nakasulat sa puting font, pagkatapos ay i-right-click sa loob ng teksto at piliin ang Change Dialect --> PostgreSQL muli . Tulad ng malamang na naunawaan mo na, ito ang parehong data na pinunan namin nang manu-mano ang paggawa ng talahanayan ng pagsubok. Dito sila ay naka-format sa PostgreSQL dialect ng SQL na wika. Ngayon punan natin ang populateDB.sql file :
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)');
Kung ang pangalan ng talahanayan ng iyong mga kliyente ay nakasulat sa mga pulang letra, okay lang. Ang bagay ay, hindi pa namin nagagawa ang talahanayang ito, at hindi pa ito nakikilala ng IDEA. Upang magawa at ma-populate ang talahanayan, kailangan nating bumalik sa application.properties file at idagdag ang sumusunod na tatlong linya doon:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Sa mga linyang ito sinasabi namin na gusto naming simulan ang database sa programmatically at ipahiwatig kung aling mga file ang kailangang gamitin para dito. Susunod, pumunta sa pangunahing paraan ng aming aplikasyon at ilunsad ito . Pagkatapos nito, pumunta sa pgAdmin --> Servers --> PostgreSQL 12 --> Databases --> customer --> Schemas --> public , i-right-click sa " Tables ", " Update ". Kung naging maayos ang lahat, makikita namin ang talahanayan ng mga kliyente na aming ginawa . Pagkatapos nito, bumalik sa application.properties file at magkomento sa linya.
spring.datasource.data=classpath*:database/populateDB.sql
tulad ng nasa ibaba:
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
Kung hindi namin gagawin ito, sa susunod na patakbuhin namin ang program ay matatanggap namin ang sumusunod na error: org.postgresql.util.PSQLException: ERROR: Ang isang duplicate na halaga ng key ay lumalabag sa natatanging hadlang "clients_pkey" . Nangyayari ito dahil napunan na namin ang mga patlang na may id 1 at 2 sa talahanayan (kahit noong unang paglulunsad). Sa talahanayan na aming ginawa, ang id field ay tinukoy bilang bigserial , na tumutugma sa Long type sa Java. Gayunpaman, sa aming programa ang uri para sa field na ito ay Integer . Nagpasya akong ipakita kung paano gamitin ang Long (BIGSERIAL) dahil mas malaki ang saklaw nito kaysa sa Integer. Ang katotohanan ay sa mga talahanayan, ang isang patlang na itinalaga bilang Pangunahing Key ay maaaring gamitin hindi lamang upang mag-imbak ng mga user id , kundi pati na rin upang mag-imbak ng mga index ng isang malawak na pagkakaiba-iba ng data, at ang bilang ng mga naturang talaan ay maaaring lumampas sa maximum na halaga ng Integer. Halimbawa, kung ang aming programa ay tumatagal ng ilang mga sukat bawat segundo at isinusulat ang data sa isang talahanayan. Upang muling isulat ang aming mga klase upang magamit ang Long data type, kailangan naming baguhin ang uri mula sa Integer patungo sa Long sa lahat ng klase at pamamaraan na gumagamit ng id field . Hindi namin ito gagawin, dahil ang programa ay orihinal na isinulat ng may-akda para sa uri ng id Integer, na nangangahulugang ito ay may katuturan. Upang magpatuloy, muli nating alisin ang talahanayan ng mga kliyente na nilikha namin mula sa aming database, ngunit ngayon ay susubukan naming gawin ito sa pamamagitan ng program sa halip na manu-mano. Upang gawin ito, magkomento sa aming code sa initDB.sql file at magdagdag ng isang linya:
-- 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
Ilunsad natin ang programa, pumunta sa pgAdmin , i-right click sa “ Tables ” (sa database ng aming mga customer ) - ->Update ”, at makikita namin na nawala ang aming table. NB! Mag-ingat kapag ginagamit ang utos na ito, kung hindi, mapanganib mong mawala ang lahat ng data na mayroon ka sa iyong talahanayan! Bumalik tayo sa initDB.sql file at muling isulat ito tulad ng sumusunod:
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
);
Dito namin binago ang uri ng id sa SERIAL , na tumutugma sa uri ng Integer na ginagamit namin para sa field ng id sa aming programa. Bilang karagdagan, ang maximum na haba ng field ng telepono ay nadagdagan upang malaya nating magamit ang mga puwang at mga espesyal na character (panaklong, gitling, atbp.) sa pagsulat nito. Ang maximum na bilang ng mga digit sa isang numero ng telepono ay kasalukuyang 18 digit (kung ang aking memorya ay nagsisilbi sa akin ng tama). Itinakda ko ang laki sa 50 character para makasigurado. Pumunta tayo sa application.properties file at alisin sa komento ang linya:
spring.datasource.data=classpath*:database/populateDB.sql
Patakbuhin natin ang aming programa, pumunta sa pgAdmin, suriin kung ang aming talahanayan ay nilikha, at ikomento ang linyang ito pabalik.
#spring.datasource.data=classpath*:database/populateDB.sql
Dito ko marahil tatapusin ang unang bahagi ng artikulo. Sana ay magustuhan mo, magsulat ng mga komento (kahit na hindi mo ito nagustuhan). Sa ikalawang bahagi, muling isusulat namin ang aming mga klase upang gumana ang mga ito sa mga totoong database. Pagpapatuloy: Pagdaragdag ng database ng PostgreSQL sa isang RESTful na serbisyo sa Spring Boot. Part 2 UPD Salamat sa mga moderator para sa pagwawasto ng aking mga larawan at pag-format ng teksto!
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION