Эллинор Керринин “REST Обзору” деп аталган макалаларынын сериясы мага абдан жакты деп айтып баштайын . Бул макалаларга шилтемелер:
- RESTге сереп салуу. 1-бөлүк: REST деген эмне
- RESTге сереп салуу. 2-бөлүк: Кардар менен serverдин ортосундагы байланыш
- RESTге сереп салуу. 3-бөлүк: Жазгы жүктөөдө RESTful кызматын түзүү
<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 файлдарыбызды толтурууга уланталы . Адегенде 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 Сүрөттөрүмдү жана текстти форматтаганды оңдогону үчүн модераторлорго рахмат!
GO TO FULL VERSION