JavaRush /Java блогу /Random-KY /Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат база...
Artur
Деңгээл
Tallinn

Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу. 1-бөлүк

Группада жарыяланган
Эллинор Керринин “REST Обзору” деп аталган макалаларынын сериясы мага абдан жакты деп айтып баштайын . Бул макалаларга шилтемелер: Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-1-бөлүкЖалпысынан алганда, мен эркиндикти алып, аларга бир аз кошууну чечтим. Тактап айтканда, маалымат базасын түзүү жана аны бул тиркемеге кантип туташтыруу керек. Эмнеден баштасам? Мүмкүн, базанын өзүнөн. Мен PostgreSQLди колдонууну чечтим , анткени анын колдонуучуга ыңгайлуу администратор интерфейси жакты. Биринчиден, биз PostgreSQL орнотуучуну жүктөп алышыбыз керек, мисалы, бул жерден: PostgreSQL маалыматтар базасын жүктөп алуу Мен толук орнотуу процессин сүрөттөп бербейм, анткени ал сиздин OS жараша ар кандай болушу мүмкүн. Бирок, мен бул процессте сиз демейки postgres ролу (эсеп жазуусу) үчүн администратордун сырсөзүн ойлоп таап , аны 2 жолу киргизишиңиз керек экенин белгилеймин. Жөнөкөйлүк үчүн мен сырсөздү 123 деп койдум . Албетте, реалдуу долбоорлордо татаалыраак нерсени ойлоп табуу керек. Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-2-бөлүкАндан кийин, орнотуу программасы портту тандоону сунуштайт; Мен аны демейки маанисинде калтырдым. Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-3-бөлүкЖергorктүү тил да демейки катары калтырылган. Орнотулуп, андан кийин pgAdminЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-4-бөлүк администратор интерфейсин ачыңыз . Браузер калкыма терезе менен ачылат, анда бизден мурун түзүлгөн сырсөздү киргизүүнү талап кылат. Эми интерфейс тorн орнотуу керек. Бул үчүн, чыкылдатыңыз Конфигурация pgAdmin --> Ар кандай --> Колдонуучунун тor , каалаган тилди тандаңыз --> Сактоо , жана браузердин барагын кайра жүктөңүз . Барактын жогорку сол бурчунда Серверди басыңыз, “ Серверге туташуу ” терезеси пайда болот . Сырсөзүбүздү кайра киргизиңиз жана аны ар дайым киргизбеш үчүн Сактоо паролду кутучасын белгилеңиз . Биз бардык маалымат базалары үчүн администратордун ролун колдоно берсек болот, бирок жаңы ролду түзсөк жакшы болмок, анткени бизде көптөгөн маалымат базалары жана аларды колдонгон көптөгөн программалар болушу мүмкүн. Бул үчүн, жогорку сол бурчта, PostgreSQL 12 чыкылдатыңыз --> Кирүү/Группалык Ролдор боюнча RMB --> Түзүү --> Кирүү/Группалык Рол Калкыма терезеде, " Жалпы " өтмөгүндө, ролдун аты. Мен ролдун тамырын атадым . " Аныктоо " өтмөгүндө биз жаңы сырсөз түзөбүз, мен адашып калбаш үчүн 123 калтырдым. " Укуктар " өтмөгүнө өтүп , бардык керектүү нерселерди белгилеңиз. Мен бардык элементтерди " ООБА " деп койдум . " Сактоо " баскычын басыңыз Биз маалымат базасын түзүүгө киришебиз. "Маалымат базалары" --> Түзүү --> Маалымат базасын оң баскыч менен чыкылдатыңыз " Жалпы " кошумча барагында, маалымат базасынын атын түзүңүз. Ал, мисалы, кардарлар болсун . Мурунку кадамда жараткан root ээсин дайындайбыз . Үстүндө "Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-5-бөлүкЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-6-бөлүкЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-7-бөлүк Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-8-бөлүкЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-9-бөлүкЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-10-бөлүкЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-11-бөлүк Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-12-бөлүкЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-13-бөлүкАныктама » бизде UTF8 codeдоо топтому бар экенин текшериңиз . " Сактоо " баскычын чыкылдатыңыз. Болду, биздин маалымат базабыз түзүлдү (азыр бош). Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-14-бөлүкБул учурда биз pgAdmin менен бүтүрө алабыз, анткени... Биз tableларды программалык түрдө түзөбүз, бирок, мен сизге tableны кол менен кантип түзүүнү көрсөтөм. Кардарларды кеңейтүү --> Схемалар --> коомдук дарак . Таблицаларды оң баскыч менен чыкылдатыңыз --> түзүү --> Таблица . Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-15-бөлүкКалкыма терезе ачылат. " Жалпы " өтмөгүндө биз tableга ат ыйгарабыз, мисалы test_table , жана root ээси катары тамырды дайындайбыз . Жаңы тилке түзүү үчүн " МамычаларЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-16-бөлүк " өтмөгүнө өтүп , " + " баскычын басыңыз . “ id ” атын жана чоң сериялуу берorштердин түрүн киргизиңиз, бул Javaдагы Long түрүнө барабар , бирок авто-өсүү менен (жаңы жазууну кошкондо, id автоматтык түрдө бир көбөйөт). NULL эместиОоба ” деп белгилейбиз, негизги ачкыч дагы “ Ооба ”. Ушундай эле жол менен “ аты ”, “ электрондук почта ” жана “ телефон ” тилкелерин түзөбүз . Биз маалымат түрүнүн символун тандайбыз, бул Саптын түрүнө туура келет , бирок максималдуу узундукту коюуга мүмкүндүк берет. Толук атын толтуруу үчүн максималдуу аталыш узундугун 200 белгиге койдук . бир колонкада. Биз электрондук почтанын максималдуу узундугун 254 белгиге койдук . Эмне үчүн электрондук почтанын максималдуу узундугун бул жерден тапса болот . Телефон номери үчүн 20 белги тандаңыз, бул жетиштүү болушу керек. Телефон номерлери жөнүндө бир аз: Телефон номерлери жөнүндө программисттердин жаңылыш түшүнүгү (Habr) Эгерде биз бул маалымат милдеттүү болушун кааласак, бардык тилкелерде NULL эмес дегенди “ Ооба ” деп белгилейбиз. " Сактоо " баскычын чыкылдатыңыз. Болду, үстөл түзүлдү. Сыноо столубузду жок кылуу үчүн, аны оң баскыч менен чыкылдатыңыз (даракта) жана " жок кылуу ", анткени Бизге мындан ары анын кереги жок, анткени биз өз программабыздан tableларды түзөбүз. pgAdmin жабыңыз жана биздин программага өтүңүз. Биздин долбоор менен IDEA ачалы. Интерфейстин оң тилкесинде Маалыматтар базасын чыкылдатыңыз , биздин маалымат базасын кошуу үчүн " + " баскычын басыңыз. Кийинки маалымат булагы -> PostgreSQL . Калкыма терезеде, Колдонуучу талаасына биз мурда түзгөн түпкү ролду жана сырсөзүбүздү киргизиңизЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-17-бөлүкЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-18-бөлүкЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1 - 19-бөлүк123 сырсөз талаасында . Маалыматтар базасы талаасында биз кардарларыбыздын маалымат базасынын атын жазабыз . Биз баскычты басыңыз Байланышты текшерүү , жана анын астында жашыл белгини көрсөк, анда баары өз ордунда, жана биз баскычты басыңыз OK . Жазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1 - 20-бөлүкБолду, биз маалымат базасына туташтырдык, эми pom.xml файлына өтүп , көз карандылыктарды кошолу. ORM маалымат базасы менен иштөө үчүн :
<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>
Tomcat serverи үчүн:
<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 . Биринчиси tableларды түзүү үчүн жооп берет, экинчиси аларды алгач толтуруу үчүн жооптуу болот. Келгиле, initDB.sql файлын ачалы жана жогору жагында SQL диалекти конфигурацияланган эмес деген жашыл тилкени көрөлү . Бул биздин долбоор үчүн SQL диалектисин тандап алган жокпуз дегенди билдирет (жана алардын бир нечеси бар). Диалектти өзгөртүү деген жазуудагы ошол эле тилкенин оң жагын чыкылдатыңыз … . Калкыма терезеде чыкылдатыңыз Project SQL диалекти , жана биздин маалымат базабыз PostgreSQL болгондуктан , биз ошол эле аталыштагы диалекти тандайбыз. OK баскычын чыкылдатыңыз Келиңиз, .sqlЖазгы жүктөөдө RESTful кызматына PostgreSQL маалымат базасын кошуу.  1-21-бөлүк файлдарыбызды толтурууга уланталы . Адегенде 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
);
Эгер файлды толтургандан кийин, кардарлардан башка кээ бир сөздөр ак шрифт менен жазылса, анда тексттин ичин оң баскыч менен чыкылдатып, Диалектти өзгөртүү -> PostgreSQLди кайра тандаңыз . Сиз, балким, буга чейин эле түшүнгөн, бул тест столун кол менен түзүүдө биз толтурган ошол эле маалыматтар. Бул жерде алар SQL тorнин PostgreSQL диалектисинде форматталган. Эми 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)');
Сиздин кардарлар үстөлдүн аты кызыл тамгалар менен жазылган болсо , анда жакшы болот. Кептин баары биз бул tableны түзө элекпиз жана 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 --> Берorштер базалары --> кардарлар --> Схемалар --> жалпыга өтүңүз, " Таблицалар ", " Жаңыртуу " дегенди оң баскыч менен чыкылдатыңыз . Эгер баары жакшы болсо, анда биз түзгөн кардарлардын tableсын көрөбүз . Андан кийин, 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" уникалдуу чектөөсүн бузду . Бул tableдагы id 1 жана 2 менен талааларды мурунтан эле толтургандыктан болот (биринчи ишке киргизүүдө да). Биз түзгөн tableда id талаасы Javaдагы Long түрүнө туура келген bigserial катары көрсөтүлгөн . Бирок, биздин программада бул талаанын түрү бүтүн сан болуп саналат . Мен Long (BIGSERIAL) кантип колдонууну көрсөтүүнү чечтим, анткени ал бүтүн санга караганда чоңураак диапазонго ээ. Чындыгында, tableларда Негизги ачкыч катары белгиленген талаа колдонуучу идентификаторлорун сактоо үчүн гана эмес , ошондой эле ар түрдүү маалыматтардын индекстерин сактоо үчүн колдонулушу мүмкүн жана мындай жазуулардын саны бүтүн сандын максималдуу маанисинен ашып кетиши мүмкүн. Мисалы, биздин программа секунд сайын кээ бир өлчөөлөрдү алып, маалыматтарды tableга жаза турган болсо. Узун маалымат түрүн колдонуу үчүн класстарыбызды кайра жазуу үчүн, id талаасын колдонгон бардык класстарда жана методдордо типти бүтүн сандан Longга өзгөртүүбүз керек . Биз муну кылбайбыз, анткени программа башында автор тарабынан id Integer түрү үчүн жазылган, демек бул кандайдыр бир мааниге ээ. Улантуу үчүн, биз түзгөн кардарлар tableсын дагы бир жолу маалымат базасынан алып салалы, бирок эми аны кол менен эмес, программалык түрдө жасаганга аракет кылабыз. Бул үчүн, initDB.sql файлында биздин codeду комментарийлеп , бир сап кошуңуз:
-- 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ге өтүп, “ Таблицалар ” (биздин кардарлардын маалымат базасында ) - ->Жаңыртуу ” дегенди оң баскыч менен чыкылдатыңыз , ошондо биз tableбыздын жок болгонун көрөбүз. NB! Бул буйрукту колдонууда этият болуңуз, антпесе tableңыздагы бардык маалыматтарды жоготуп алуу коркунучу бар! Келгиле, 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 талаасы үчүн колдонуп жаткан Integer түрүнө дал келет. Мындан тышкары, телефон талаасынын максималдуу узундугу көбөйтүлүп, биз аны жазууда боштуктарды жана атайын символдорду (кашалар, сызыктар ж.б.) эркин колдоно алабыз. Телефон номериндеги цифралардын максималдуу саны учурда 18 санды түзөт (эгерде эс тутум мага туура кызмат кылса). Мен ишенүү үчүн өлчөмүн 50 белгиге койдум. Келгиле, application.properties файлына барып, сапты комментарийден чыгаралы:
spring.datasource.data=classpath*:database/populateDB.sql
Келгиле, программабызды иштетели, pgAdminге өтүп, tableбыздын түзүлгөнүн текшерип, бул сапты кайра комментарийлейли.
#spring.datasource.data=classpath*:database/populateDB.sql
Бул жерде мен, балким, макаланын биринчи бөлүгүн бүтүрөм. Сизге жагат деп ишенем, комментарий жазыңыз (жакпаса да). Экинчи бөлүктө биз класстарыбызды чыныгы маалымат базалары менен иштеши үчүн кайра жазабыз. Уландысы: Жазгы жүктөөдөгү RESTful кызматына PostgreSQL маалымат базасын кошуу. 2-бөлүк UPD Сүрөттөрүмдү жана текстти форматтаганды оңдогону үчүн модераторлорго рахмат!
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION