اسمحوا لي أن أبدأ بالقول إنني استمتعت حقًا بسلسلة المقالات التي كتبتها إليانور كيري بعنوان "نظرة عامة على REST". فيما يلي روابط لهذه المقالات:
- نظرة عامة على الراحة. الجزء 1: ما هو الراحة
- نظرة عامة على الراحة. الجزء الثاني: التواصل بين العميل والخادم
- نظرة عامة على الراحة. الجزء 3: إنشاء خدمة RESTful في Spring Boot
<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، وحددنا اللهجة للإسبات. بعد ذلك، لنقم بإنشاء دليل جديد يسمى قاعدة البيانات في نفس مجلد الموارد . في هذا الدليل سنقوم بإنشاء ملفين: initDB.sql و populateDB.sql . الأول سيكون مسؤولاً عن إنشاء الجداول، والثاني سيكون مسؤولاً عن ملئها في البداية. دعونا نفتح initDB.sql ونرى شريطًا أخضر في الأعلى يشير إلى أنه لم يتم تكوين لهجة SQL . هذا يعني أننا لم نختار لهجة SQL لمشروعنا (وهناك العديد منها). انقر على الجانب الأيمن من نفس الشريط الموجود على النقش تغيير اللهجة إلى… . في النافذة المنبثقة، انقر فوق Project SQL Dialect ، وبما أن قاعدة البيانات الخاصة بنا هي 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
);
إذا تمت كتابة بعض الكلمات بخلاف العملاء بخط أبيض ، بعد ملء الملف ، فانقر بزر الماوس الأيمن داخل النص وحدد تغيير اللهجة --> PostgreSQL مرة أخرى . كما قد تكون قد فهمت بالفعل، فهذه هي نفس البيانات التي قمنا بملئها عند إنشاء جدول الاختبار يدويًا. هنا يتم تنسيقها بلهجة PostgreSQL الخاصة بلغة SQL. الآن لنملأ ملف 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: خطأ: تنتهك قيمة المفتاح المكررة القيد الفريد "clients_pkey" . يحدث هذا لأننا ملأنا الحقول بالمعرفين 1 و 2 في الجدول بالفعل (حتى أثناء الإطلاق الأول). في الجدول الذي أنشأناه، تم تحديد حقل المعرف على أنه bigserial ، والذي يتوافق مع النوع الطويل في Java. ومع ذلك، في برنامجنا نوع هذا الحقل هو عدد صحيح . قررت أن أوضح كيفية استخدام Long (BIGSERIAL) لأنه يحتوي على نطاق أكبر من عدد صحيح. الحقيقة هي أنه في الجداول، يمكن استخدام الحقل المعين كمفتاح أساسي ليس فقط لتخزين معرفات المستخدمين ، ولكن أيضًا لتخزين فهارس مجموعة واسعة من البيانات، ويمكن أن يتجاوز عدد هذه السجلات الحد الأقصى لقيمة عدد صحيح. على سبيل المثال، إذا كان برنامجنا يأخذ بعض القياسات كل ثانية ويكتب البيانات في جدول. من أجل إعادة كتابة فئاتنا لاستخدام نوع البيانات الطويل، نحتاج إلى تغيير النوع من عدد صحيح إلى طويل في جميع الفئات والأساليب التي تستخدم حقل المعرف . لن نفعل ذلك، لأن البرنامج كتبه المؤلف في الأصل لنوع 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 ، وانقر بزر الماوس الأيمن على " الجداول " (في قاعدة بيانات عملائنا ) - -> " تحديث "، وسنرى أن جدولنا قد اختفى. ملحوظة! كن حذرًا عند استخدام هذا الأمر، وإلا فإنك تخاطر بفقدان جميع البيانات الموجودة في جدولك! دعنا نعود إلى ملف 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 إلى خدمة RESTful على Spring Boot. الجزء 2 محدث شكرًا للمشرفين على تصحيح الصور وتنسيق النص!
GO TO FULL VERSION