مجھے یہ کہتے ہوئے شروع کرنے دیں کہ میں نے واقعی میں ایلینور کیری کے مضامین کی سیریز کا لطف اٹھایا جسے "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 کو ترتیب دیا ہے، آئیے وسائل کے فولڈر میں جائیں اور 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 ۔ پہلا ٹیبل بنانے کا ذمہ دار ہوگا، دوسرا ابتدائی طور پر ان کو بھرنے کا ذمہ دار ہوگا۔ آئیے initDB.sql کھولیں اور سب سے اوپر ایک سبز بار دیکھیں جو کہتا ہے کہ SQL بولی کنفیگر نہیں ہے ۔ اس کا مطلب ہے کہ ہم نے اپنے پروجیکٹ کے لیے SQL بولی کا انتخاب نہیں کیا ہے (اور ان میں سے کئی ہیں)۔ نوشتہ پر اسی پٹی کے دائیں جانب کلک کریں بولی کو تبدیل کریں… . پاپ اپ ونڈو میں، پروجیکٹ SQL ڈائلیکٹ پر کلک کریں ، اور چونکہ ہمارا ڈیٹا بیس PostgreSQL ہے ، ہم اسی نام کی بولی منتخب کرتے ہیں۔ ٹھیک ہے پر کلک کریں آئیے اپنی .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
);
اگر، فائل کو بھرنے کے بعد، کلائنٹس کے علاوہ کچھ الفاظ سفید فانٹ میں لکھے گئے ہیں، تو متن کے اندر دائیں کلک کریں اور Change 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 --> ڈیٹا بیس --> کسٹمرز --> اسکیماس --> پبلک پر جائیں ، " ٹیبلز "، " اپ ڈیٹ " پر دائیں کلک کریں۔ اگر سب کچھ ٹھیک رہا، تو ہم کلائنٹس کی میز دیکھیں گے جو ہم نے بنائی ہے ۔ اس کے بعد، 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 کے طور پر بیان کیا گیا ہے ، جو جاوا میں Long type سے مساوی ہے۔ تاہم، ہمارے پروگرام میں اس فیلڈ کی قسم Integer ہے ۔ میں نے طویل (BIGSERIAL) کو استعمال کرنے کا طریقہ دکھانے کا فیصلہ کیا کیونکہ اس کی رینج انٹیجر سے بڑی ہے۔ حقیقت یہ ہے کہ جدولوں میں، بنیادی کلید کے طور پر نامزد کردہ فیلڈ کو نہ صرف صارف کے 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
);
یہاں ہم نے آئی ڈی کی قسم کو SERIAL میں تبدیل کر دیا ہے ، جو انٹیجر کی قسم سے میل کھاتا ہے جسے ہم اپنے پروگرام میں آئی ڈی فیلڈ کے لیے استعمال کر رہے ہیں۔ اس کے علاوہ، فون فیلڈ کی زیادہ سے زیادہ لمبائی میں اضافہ کیا گیا ہے تاکہ ہم اس کی تحریر میں خالی جگہوں اور خصوصی حروف (قوسین، ڈیشز وغیرہ) کو آزادانہ طور پر استعمال کر سکیں۔ فون نمبر میں ہندسوں کی زیادہ سے زیادہ تعداد فی الحال 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