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:
- Pangkalahatang-ideya ng REST. Part 1: Ano ang REST
- Pangkalahatang-ideya ng REST. Bahagi 2: Komunikasyon sa pagitan ng kliyente at server
- Pangkalahatang-ideya ng REST. Bahagi 3: Paglikha ng isang RESTful na Serbisyo sa Spring Boot
<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 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!
GO TO FULL VERSION