JavaRush /Java Blog /Random-TK /“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful h...
Artur
Dereje
Tallinn

“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak. 1-nji bölüm

Toparda çap edildi
Elleanor Kerriniň “REST Syn” atly makalalar tapgyryny gaty haladym diýmek bilen başlaýaryn . Ine, şu makalalara baglanyşyklar: “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümUmuman, azatlygy alyp, olara azajyk goşmak kararyna geldim. Aagny, maglumat bazasyny nädip döretmelidigini we ony bu programma birikdirmelidigini aýdyň. Nireden başlamaly? Maglumat bazasynyň özünden bolsa gerek. PostgreSQL ulanmagy makul bildim , sebäbi ulanyjy üçin amatly administrator interfeýsini haladym. Ilki bilen, “PostgreSQL” gurnaýjysyny göçürip almaly, mysal üçin şu ýerden: PostgreSQL maglumat bazasyny göçürip almak Men doly gurnama işini suratlandyrjak däl, sebäbi operasiýa ulgamyňyza baglylykda tapawutlanyp biler. Şeýle-de bolsa, bu işde adaty postgres roly (hasaby) üçin administrator parolyny tapmalydygyňyzy we 2 gezek girizmelidigiňizi belläp geçýärin. Ityönekeýlik üçin paroly 123-e belledim . Elbetde, hakyky taslamalarda has çylşyrymly bir zat oýlap tapmak zerur. “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümOndan soň, gurnama programmasy size port saýlamagy maslahat berýär; men ony asyl bahasynda goýdum. “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümLokal hem adaty ýagdaýda galdyryldy. “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümGuruldy, soňra administrator interfeýsini açyň pgAdmin . Brauzer açylan penjire bilen açylar, bu ýerde ozal döredilen paroly girizmegimiz soralar. “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümIndi interfeýs dilini düzmeli. Munuň üçin pgAdmin -> Dürli -> Ulanyjy dilini sazlaň , islenýän dili saýlaň -> Saklaň we brauzer sahypasyny täzeden ýükläň . “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümSahypanyň ýokarky çep burçunda Serwere basyň, " Serwere birikmek " penjiresi peýda bolýar . Parolymyzy täzeden giriziň we her gezek girmezlik üçin paroly ýatda saklaň. “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-7-nji bölümDatahli maglumat bazalary üçin administrator roluny ulanmagy dowam etdirip bilerdik, ýöne täze rol döretmek has gowy bolardy, sebäbi maglumatlar bazalarymyz we olary ulanýan köp programmalarymyz bolup biler. Munuň üçin çep ýokarky burçda, PostgreSQL 12 -> Giriş / Topar rollaryndaky RMB basyň -> Dörediň -> Giriş / Toparyň roly “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölüm Açylýan penjirede, " Umumy " goýmasynda, giriň roluň ady. Roluň adyny tutdum . “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümKesgitleme ” goýmasynda täze parol döredýäris, bulaşmazlyk üçin 123 goýdum. “ Hukuklar“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-10-njy bölüm ” goýmasyna giriň we ähli zerur zatlary belläň. Itemshli zatlary " Hawa " diýip belledim . " Saklamak " düwmesine basyň Maglumat bazasyny döretmäge dowam edýäris. “Maglumatlar bazalary” -> Dörediň -> Maglumatlar bazasyna sag basyň, “ Umumy ” goýmasynda maglumat bazasynyň adyny dörediň. Mysal üçin, müşderiler bolsun . Öňki ädimde döreden kökümizi eýesine belläris . Üstünde "“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölüm “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölüm“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümKesgitleme » UTF8 kodlaýyş toplumynyň bardygyny barlaň . " Saklamak " düwmesine basyň. Ine, maglumatlar bazamyz döredildi (häzirlikçe boş). “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümBu pursatda pgAdmin bilen gutaryp bileris, sebäbi ... Tablisa programma taýdan dörederis, ýöne şeýle bolan ýagdaýynda, el bilen tablisany nädip döretmelidigini görkezerin. Müşderileri giňeltmek -> Shemalar -> köpçülikleýin agaç . Tablisa -> Döret -> Tablisa sag basyň . “PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-15-nji bölümAçylýan penjire açylar. “ Umumy ” goýmasynda, mysal üçin test_table , stolumyza bir at belleýäris we kök eýesi hökmünde belläris . " Sütünler“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-16-njy bölüm " goýmasyna giriň we täze sütün döretmek üçin " + " düwmesine basyň . “ Id ” adyny we Java görnüşindäki Uzyn görnüşe ekwiwalent , ýöne awtomatik artdyrmak bilen (täze ýazgy goşulanda id awtomatiki usulda köpelýär) maglumat görnüşini giriziň. NULL däl diýip “ Hawa ” diýip belleýäris, esasy açar hem “ Hawa ”. “ Ady ”, “ e-poçta ” we “ telefon ” sütünlerini şol bir görnüşde döredýäris . Maglumatlaryň görnüşiniň üýtgeýänini saýlaýarys , bu setir görnüşine gabat gelýär , ýöne iň ýokary uzynlygy kesgitlemäge mümkinçilik berýär. Doly ady doldurmak üçin iň ýokary at uzynlygyny 200 nyşana belledik . bir sütünde. Iň köp e-poçta uzynlygyny 254 nyşana belledik . E-poçta näme üçin beýle uzynlygyň bardygyny şu ýerden tapyp bilersiňiz . Telefon belgisi üçin 20 simwoly saýlaň, bu ýeterlik bolmaly. Telefon belgileri barada azajyk: Programmistleriň telefon belgileri (Habr) baradaky ýalňyş düşünjeleri, bu maglumatlaryň hökmany bolmagyny islesek, ähli sütünlerde NULL däl diýip bellik edýäris. " Saklamak " düwmesine basyň. Ine, tablisa döredildi. Synag tablisamyzy pozmak üçin, onuň üstünde sag basyň (agaçda) we " poz ", sebäbi Mundan beýläk bize zerurlyk ýok, sebäbi programmamyzdan tablisalar dörederis. PgAdmin-i ýapyň we programmamyza giriň. Taslamamyz bilen IDEA açalyň. Interfeýsiň sag sütünindäki Maglumat bazasyna basyň , maglumatlar bazamyzy goşmak üçin “ + ” düwmesine basyň. Indiki maglumatlar çeşmesi -> PostgreSQL . Açylýan penjirede Ulanyjy meýdanyna ozal döreden kök rolumyzy we parolymyzy giriziň“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölüm“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-18-nji bölüm“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölümParol meýdançasynda 123 _ Maglumat bazasy meýdanynda müşderilerimiziň maglumatlar bazasynyň adyny ýazýarys . Test Connection düwmesini basýarys , aşagynda ýaşyl bellik görsek, hemme zat tertipli we OK düwmesini basýarys . Ine, maglumatlar bazasyna birikdik, indi pom.xml“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölüm faýlyna geçeliň we garaşlylygy goşalyň. ORM maglumatlar bazasy bilen işlemek üçin :
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
REST gözegçisini döretmek üçin:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Tomcat serweri üçin:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
PostgreSQL üçin:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
Indi pom.xml-i düzenimizden soň, çeşmeler bukjasyna geçeliň we application.properties faýlyny aşakdaky ýaly dolduralyň:
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 ýerde maglumatlar bazamyzyň URL-sini girizdik, giriş we paroly üpjün etdik, PostgreSQL üçin sürüjini hasaba aldyk, PostgreSQL maglumat görnüşini ulanjakdygymyzy görkezdik we Gibernate üçin şiwäni kesgitledik. Ondan soň, şol bir çeşmeler bukjasynda maglumatlar bazasy atly täze katalog döredeliň . Bu bukjada 2 faýl dörederis: initDB.sql we populateDB.sql . Birinjisi tablisalary döretmek üçin, ikinjisi başda doldurmak üçin jogapkärçilik çeker. InitDB.sql açalyň we ýokarsynda SQL şiwesiniň sazlanmandygyny aýdýan ýaşyl çyzgyny göreliň . Diýmek, taslamamyz üçin SQL şiwesini saýlamadyk (we olaryň birnäçesi bar). Şol bir zolagyň sag tarapyna basyň, şiwäni üýtgediň… . Açylýan penjirede Taslama SQL Dialektine basyň we maglumatlar bazamyz PostgreSQL bolansoň , şol bir atyň şiwesini saýlaýarys. OK basyň Geliň .sql“PostgreSQL” maglumat bazasyny “Bahar boot” -da RESTful hyzmatyna goşmak.  1-nji bölüm faýllarymyzy doldurmaga geçeliň . Ilki bilen initDB.sql faýlyny dolduralyň :
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
);
Faýly dolduranyňyzdan soň, müşderilerden başga käbir sözler ak şrift bilen ýazylan bolsa, tekstiň içine sag basyň we Dialect Change -> PostgreSQL saýlaň . Mümkin, eýýäm düşünşiňiz ýaly, synag tablisasyny el bilen döredenimizde dolduran şol maglumatlar. Bu ýerde SQL diliniň PostgreSQL şiwesinde formatlanýar. Indi populateDB.sql faýlyny dolduralyň :
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)');
Müşderileriň tablisasynyň ady gyzyl harplar bilen ýazylan bolsa , gowy bolmaz. Esasy zat, bu tablisany entek döretmedik we IDEA entek tanamaýar. Tablisa döretmek we köpeltmek üçin application.properties faýlyna dolanmaly we şol ýere aşakdaky üç setiri goşmaly:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Bu setirlerde maglumatlar bazasyny programma taýdan başlamak we munuň üçin haýsy faýllary ulanmalydygyny görkezmek isleýäris. Ondan soň, programmamyzyň esasy usulyna geçiň we işe giriziň . Ondan soň pgAdmin -> Serwerler -> PostgreSQL 12 -> Maglumatlar bazalary -> müşderiler -> shemalar -> köpçülige giriň, " Tablisa ", " Täzelenme " -e sag basyň . Hemme zat gowy geçen bolsa, onda döreden müşderilerimiziň tablisasyny görýäris . Ondan soň, application.properties faýlyna gaýdyp , setiri düşündiriň.
spring.datasource.data=classpath*:database/populateDB.sql
aşakdaky ýaly:
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
Muny etmesek, indiki gezek programmany işledenimizde aşakdaky ýalňyşlygy alarys: org.postgresql.util.PSQLException: RAL .YŞLYK: Dublikat açar bahasy özboluşly çäklendirmäni "müşderiler_pkey" bozýar . Bu, eýýäm tablisada ID 1 we 2 bilen meýdanlary doldurandygymyz sebäpli bolýar (hatda ilkinji işe girizilende-de). Döreden tablisamyzda id meýdançasy Java-daky Uzyn görnüşe gabat gelýän bigserial hökmünde görkezilýär . Şeýle-de bolsa, programmamyzda bu ugur üçin görnüş “Integer” . Uzyn (BIGSERIAL) nädip ulanmalydygyny görkezmegi makul bildim, sebäbi Integer-den has uly aralyk. Hakykat, tablisalarda başlangyç açar hökmünde kesgitlenen meýdan diňe bir ulanyjy şahsyýetnamalaryny saklamak üçin däl , eýsem dürli maglumatlaryň indekslerini saklamak üçin hem ulanylyp bilner we şeýle ýazgylaryň sany iň ýokary Integer bahasyndan ýokary bolup biler. Mysal üçin, programmamyz her sekuntda käbir ölçegleri alyp, maglumatlary tablisa ýazsa. Uzyn maglumat görnüşini ulanmak üçin synplarymyzy täzeden ýazmak üçin, id meýdançasyny ulanýan ähli synplarda we usullarda görnüşini Integer-den Long-a üýtgetmeli . Muny etmeris, sebäbi programma başda awtor tarapyndan “Integer” görnüşi üçin ýazylan , munuň manysy bar. Dowam etmek üçin, maglumatlar bazamyzdan döreden müşderilerimiziň tablisasyny ýene bir gezek aýyralyň , ýöne indi muny el bilen däl-de, programma taýdan ýerine ýetirmäge synanyşarys. Munuň üçin initDB.sql faýlyndaky kodumyzy düşündiriň we bir setir goşuň:
-- 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
Programmany işe başlalyň, pgAdmin- e geçeliň, “ Tablisa ” ( müşderilerimiziň maglumatlar bazasynda ) sag düwmesine basyň - ->Täzelen ”, stolumyzyň ýok bolandygyny göreris. NB! Bu buýrugy ulananyňyzda seresap boluň, ýogsam stoluňyzdaky ähli maglumatlary ýitirmek howpy abanýar! Geliň, initDB.sql faýlyna gaýdyp , ony aşakdaky ýaly ýazalyň:
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 ýerde, programmamyzdaky id meýdançasy üçin ulanýan Integer görnüşimize gabat gelýän id görnüşini SERIAL diýip üýtgetdik . Mundan başga-da, ýazuwda boşluklary we ýörite nyşanlary (gabygyň, çyzgylaryň we ş.m.) erkin ulanyp bilmek üçin telefon meýdançasynyň iň uzynlygy ýokarlandy. Telefon belgisindäki iň köp san häzirki wagtda 18 san (ýadyma dogry hyzmat edýän bolsa). Elbetde, ululygyny 50 simwola belledim. Programma.properties faýlyna geçeliň we setiri açmak:
spring.datasource.data=classpath*:database/populateDB.sql
Geliň, programmamyzy işledeliň, pgAdmin-e gideliň, stolumyzyň döredilendigini barlaň we bu setiri yzyna düşündiriň.
#spring.datasource.data=classpath*:database/populateDB.sql
Ine, makalanyň birinji bölümini gutararyn. Halaýarsyňyz, teswir ýazyň (halamasaňyzam) diýip umyt edýärin. Ikinji bölümde, hakyky maglumat bazalary bilen işlemekleri üçin synplarymyzy täzeden ýazarys. Dowamy: “Spring Boot” -daky RESTful hyzmatyna PostgreSQL maglumat bazasyny goşmak. 2-nji bölüm UPD Suratlarymy we tekst formatlamasyny düzedendigi üçin moderatorlara sag bolsun aýdýaryn!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION