مون کي اهو چوڻ سان شروع ڪرڻ ڏيو ته مون ايلينور ڪيري جي آرٽيڪلز جي سيريز مان واقعي لطف اندوز ٿيو جنهن کي ”REST Overview“ سڏيو ويندو آهي. هتي انهن مضمونن جا لنڪ آهن:
- REST جو جائزو. حصو 1: آرام ڇا آهي
- REST جو جائزو. حصو 2: ڪلائنٽ ۽ سرور جي وچ ۾ رابطي
- REST جو جائزو. حصو 3: اسپرنگ بوٽ ۾ آرام واري خدمت ٺاهڻ
<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 سرور لاء:
<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 کي ترتيب ڏنو آهي، اچو ته وسيلن جي فولڊر ۾ وڃو ۽ ايپليڪيشن. پراپرٽيز فائل کي هن ريت ڀريو :
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 ڊيٽا جو قسم استعمال ڪنداسين، ۽ ھائبرنيٽ لاءِ ڊيليڪٽ بيان ڪيو. اڳيون، اچو ته ساڳئي وسيلن فولڊر ۾ ڊيٽابيس نالي هڪ نئين ڊاريڪٽري ٺاهي . هن ڊاريڪٽري ۾ اسان 2 فائلون ٺاهينداسين: initDB.sql ۽ populateDB.sql . پھريون جدولن کي ٺاھڻ جو ذميوار ھوندو، ٻيو انھن کي شروعاتي طور ڀرڻ جو ذميوار ھوندو. اچو ته initDB.sql کي کوليون ۽ مٿي تي سائي بار ڏسو جيڪو چوي ٿو SQL dialect ترتيب نه آهي . هن جو مطلب آهي ته اسان پنهنجي پروجيڪٽ لاءِ SQL ٻولي نه چونڊيو آهي (۽ انهن مان ڪيترائي آهن). ساڳئي پٽي جي ساڄي پاسي تي ڪلڪ ڪريو لکت تي dialect تبديل ڪريو… . پاپ اپ ونڊو ۾، ڪلڪ ڪريو Project SQL Dialect , ۽ جيئن ته اسان جو ڊيٽابيس 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
);
جيڪڏهن، فائل ڀرڻ کان پوء، ڪلائنٽ کان سواء ٻيا لفظ اڇا فونٽ ۾ لکيل آهن، پوء متن جي اندر صحيح ڪلڪ ڪريو ۽ تبديل ڪريو Dialect -> PostgreSQL ٻيهر چونڊيو . جيئن توهان شايد اڳ ۾ ئي سمجهي چڪا آهيو، اهو ساڳيو ڊيٽا آهي جيڪو اسان ڀريو هو جڏهن ٽيسٽ ٽيبل دستي طور تي ٺاهيو. هتي اهي SQL ٻولي جي 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)');
جيڪڏهن توهان جي گراهڪن جي ٽيبل جو نالو ڳاڙهي اکرن ۾ لکيل آهي، پوء اهو ٺيڪ آهي. نقطو اهو آهي ته اسان اڃا تائين هي ٽيبل نه ٺاهيو آهي، ۽ 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 --> Databases --> Customers --> Schemas --> public , ساڄي ڪلڪ ڪريو " Tables "، " Update ". جيڪڏھن سڀ ڪجھ ٺيڪ ٿي ويو، پوء اسان ڏسون ٿا ڪلائنٽ ٽيبل جيڪو اسان ٺاھيو آھي . ان کان پوء، واپس وڃو 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: ERROR: هڪ نقل ڪيل ڪي قدر منفرد رڪاوٽ "clients_pkey" جي ڀڃڪڙي ڪري ٿي . اهو ٿي سگهي ٿو ڇاڪاڻ ته اسان اڳ ۾ ئي فيلڊ ۾ ڀريو آهي id 1 ۽ 2 سان ٽيبل ۾ (جيتوڻيڪ پهرين لانچ دوران). اسان جي ٺاهيل جدول ۾، id فيلڊ جي طور تي بيان ڪيو ويو آهي bigserial ، جيڪو جاوا ۾ لانگ قسم سان ملندو آهي. بهرحال، اسان جي پروگرام ۾ هن فيلڊ جو قسم آهي Integer . مون فيصلو ڪيو ته ڪيئن استعمال ڪجي لانگ (BIGSERIAL) ڇاڪاڻ ته ان ۾ Integer کان وڏي رينج آهي. حقيقت اها آهي ته جدولن ۾، پرائمري ڪي جي طور تي نامزد ٿيل فيلڊ استعمال ڪري سگهجي ٿي نه رڳو صارف جي ids کي ذخيرو ڪرڻ لاء ، پر پڻ مختلف قسم جي ڊيٽا جي انڊيڪس کي ذخيرو ڪرڻ لاء، ۽ اهڙن رڪارڊن جو تعداد وڌ کان وڌ انٽيجر قدر کان وڌي سگھي ٿو. مثال طور، جيڪڏهن اسان جو پروگرام هر سيڪنڊ ۾ ڪجهه ماپون وٺندو آهي ۽ ڊيٽا کي ٽيبل تي لکندو آهي. لانگ ڊيٽا جي قسم کي استعمال ڪرڻ لاءِ اسان جي ڪلاسن کي ٻيهر لکڻ لاءِ، اسان کي ان قسم کي Integer کان Long تائين سڀني طبقن ۽ طريقن ۾ تبديل ڪرڻو پوندو جيڪي id فيلڊ استعمال ڪندا آهن . اسان اهو نه ڪنداسين، ڇاڪاڻ ته پروگرام اصل ۾ ليکڪ طرفان لکيو ويو هو id Integer قسم، جنهن جو مطلب اهو آهي ته اهو ڪجهه سمجهه ۾ اچي ٿو. جاري رکڻ لاءِ، اچو ته هڪ ڀيرو ٻيهر ڪلائنٽ ٽيبل کي هٽائي ڇڏيون جيڪو اسان پنهنجي ڊيٽابيس مان ٺاهيو آهي، پر هاڻي اسان ان کي دستي جي بجاءِ پروگرام طور ڪرڻ جي ڪوشش ڪنداسين. هن کي ڪرڻ لاء، اسان جي ڪوڊ کي 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
-- );
DROP TABLE IF EXISTS clients
اچو ته پروگرام شروع ڪريون، pgAdmin ڏانهن وڃو، " ٽيبلز " تي صحيح ڪلڪ ڪريو (اسان جي ڪسٽمر ڊيٽابيس ۾ ) -> " اپڊيٽ "، ۽ اسان ڏسنداسين ته اسان جي ٽيبل غائب ٿي وئي آهي. NB! هن حڪم کي استعمال ڪرڻ وقت محتاط رهو، ٻي صورت ۾ توهان کي پنهنجي ٽيبل ۾ موجود سموري ڊيٽا کي وڃائڻ جو خطرو آهي! اچو ته 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 ۾ تبديل ڪيو آهي ، جيڪو Integer قسم سان ملندو آهي جيڪو اسان پنهنجي پروگرام ۾ id فيلڊ لاءِ استعمال ڪري رهيا آهيون . ان کان علاوه، فون جي فيلڊ جي وڌ ۾ وڌ ڊگھائي وڌايو ويو آهي ته جيئن اسان آزاديء سان ان جي لکڻين ۾ اسپيس ۽ خاص اکر (قوس، ڊيش، وغيره) استعمال ڪري سگهون ٿا. فون نمبر ۾ انگن جو وڌ ۾ وڌ تعداد في الحال 18 انگن جو آهي (جيڪڏهن منهنجي ياداشت مون کي صحيح طور تي ڪم ڪري ٿي). پڪ ڪرڻ لاءِ مون سائيز کي 50 اکرن تي مقرر ڪيو. اچو ته وڃو application.properties فائل ۽ ان لائن کي ختم ڪريو:
spring.datasource.data=classpath*:database/populateDB.sql
اچو ته اسان جو پروگرام هلون، pgAdmin ڏانهن وڃو، چيڪ ڪريو ته اسان جي ٽيبل ٺاهي وئي آهي، ۽ هن لائن کي واپس تبصرو ڪيو.
#spring.datasource.data=classpath*:database/populateDB.sql
هي آهي جتي مان شايد آرٽيڪل جو پهريون حصو ختم ڪندس. مون کي اميد آهي ته توهان ان کي پسند ڪيو، تبصرو لکو (جيتوڻيڪ توهان اهو پسند نه ڪيو). ٻئين حصي ۾، اسان پنهنجي ڪلاسن کي ٻيهر لکنداسين ته جيئن اهي حقيقي ڊيٽابيس سان ڪم ڪري سگهن. تسلسل: اسپرنگ بوٽ تي هڪ آرام واري خدمت ۾ PostgreSQL ڊيٽابيس شامل ڪرڻ. حصو 2 UPD منهنجي تصويرن ۽ ٽيڪسٽ فارميٽنگ کي درست ڪرڻ لاءِ منتظمين جي مهرباني!
GO TO FULL VERSION