11. PostgreSQL 9.4
ننتقل الآن إلى تكييف ما تم تنفيذه مع Oracle مع الإصدار PostgreSQL 9.4.
![]() |
11.1. إعداد بيئة العمل
11.1.1. بيئة Eclipse
سنعمل باستخدام بيئة Eclipse التالية:
![]() |
ستجد المشاريع المذكورة أعلاه (PostgreSQL) في المجلد [<exemples>/spring-database-config\postgresql\eclipse].
ملاحظة: قم بتنفيذ الأمر [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.
11.1.2. إنشاء قواعد البيانات
في جميع الخطوات التالية، يتم الاتصال بقواعد البيانات PostgresSQL باستخدام بيانات اعتماد [postgres / postgres]. قم بتشغيل PostgreSQL وعميله [PgManager] (انظر الفقرة 23.7).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() | ![]() |
![]() |
- في [1]، سيتم تحميل البرنامج النصي SQL [<exemples>\spring-database-config\postgresql\databases\dbproduits.sql]؛
![]() | ![]() |
![]() |
- إلى [2]، وكما هو الحال مع Oracle، تستخدم طبقات JPA تسلسلات لإنشاء المفاتيح الأولية. هنا، يُنشئ التسلسل [produits_sequence] المفاتيح الأولية للجدول [produits]؛
الآن، قم بتنفيذ التكوينات التالية:
- [spring-jdbc-generic-01.IntroJdbc01]؛
- [spring-jdbc-generic-01.IntroJdbc02]؛
- [spring-jdbc-generic-03.JUnitTestDao1]؛
- [spring-jdbc-generic-03.JUnitTestDao2]؛
يجب أن تنجح جميعها.
لنقم الآن بإنشاء القاعدة [dbproduitscategories]. كرر الإجراء الذي تم تنفيذه لإنشاء [dbproduits] مع [dbproduitscategories]. يوجد البرنامج النصي SQL المطلوب تحميله في الموقع [<exemples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql]؛
![]() |
الآن، قم بتنفيذ الإعدادات التالية:
- [spring-jdbc-generic-04.JUnitTestDao]؛
- [spring-jpa-generic-JUnitTestDao-openjpa]؛
يجب أن تنجح الإعدادات كلاهما.
11.2. إعداد الطبقة JDBC
![]() | ![]() |
يقوم المشروع [postgresql-config-jdbc] بتكوين الطبقة [JDBC] في بنية الاختبارات التالية:
![]() |
هذا المشروع مشابه لمشروع التهيئة [mysql-config-jdbc] للطبقة JDBC التابعة لـ SGBD MySQL (انظر الفقرة 3.3). ونعرض هنا التعديلات فقط:
يستورد الملف [pom.xml] برنامج التشغيل JDBC من PostgreSQL:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dvp.spring.database</groupId>
<artifactId>generic-config-jdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>configuration generic jdbc</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
</parent>
<dependencies>
<!-- التبعيات المتغيرة ********************************************** -->
<!-- برنامج التشغيل JDBC الخاص بـ SGBD -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
<!-- التبعيات الثابتة ********************************************** -->
...
</dependencies>
...
</project>
- الأسطر 18-22: برنامج التشغيل JDBC من PostgreSQL؛
التعديل الثاني موجود في الفئة [ConfigJdbc] التي تحدد معرّفات الوصول إلى قواعد البيانات:
// معلمات الاتصال
public final static String DRIVER_CLASSNAME = "org.postgresql.Driver";
public final static String URL_DBPRODUITS = "jdbc:postgresql:dbproduits";
public final static String USER_DBPRODUITS = "postgres";
public final static String PASSWD_DBPRODUITS = "postgres";
public final static String URL_DBPRODUITSCATEGORIES = "jdbc:postgresql:dbproduitscategories";
public final static String USER_DBPRODUITSCATEGORIES = "postgres";
public final static String PASSWD_DBPRODUITSCATEGORIES = "postgres";
التعديل الثالث الذي يمكن إجراؤه هو تعديل الحد الأقصى لعدد المعلمات التي يمكن أن يدعمها [PreparedStatement]:
// الحد الأقصى لعدد المعلمات في [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
يُنشئ الاختبار [JUnitTestPushTheLimits] أوامر SQL على 5000 منتج، والتي ستُنشئ بدورها أوامر [PreparedStatement] تحتوي على 5000 معلمة. وقد دعم MySQL هذه القيمة. وكذلك الأمر بالنسبة لـ PostgreSQL.
أما التعديل الرابع فهو الأكثر إثارة للدهشة:
public final static String TAB_PRODUITS_ID = "id";
public final static String TAB_CATEGORIES_ID = "id";
يجب أن تكون أسماء الأعمدة [ID] في الجداول [CATEGORIES] و [PRODUITS] مكتوبة بأحرف صغيرة في المشروع [spring-jdbc-04]. وإلا، فسيحدث تعطل في الأوامر التي تستخدم المكونين التاليين من هذا المشروع:
// إدراج المنتج
@Bean
public SimpleJdbcInsert simpleJdbcInsertProduit(DataSource dataSource) {
return new SimpleJdbcInsert(dataSource)
.withTableName(ConfigJdbc.TAB_PRODUITS)
.usingGeneratedKeyColumns(ConfigJdbc.TAB_PRODUITS_ID)
.usingColumns(ConfigJdbc.TAB_PRODUITS_NOM, ConfigJdbc.TAB_PRODUITS_PRIX, ConfigJdbc.TAB_PRODUITS_DESCRIPTION,
ConfigJdbc.TAB_PRODUITS_CATEGORIE_ID);
}
// إضافة فئة
@Bean
public SimpleJdbcInsert simpleJdbcInsertCategorie(DataSource dataSource) {
return new SimpleJdbcInsert(dataSource).withTableName(ConfigJdbc.TAB_CATEGORIES)
.usingGeneratedKeyColumns(ConfigJdbc.TAB_CATEGORIES_ID)
.usingColumns(ConfigJdbc.TAB_CATEGORIES_NOM);
}
11.3. تكوين الطبقة JPA OpenJpa
![]() | ![]() |
يقوم المشروع [postgresql-config-jpa-openjpa] بتكوين الطبقة [JPA] في بنية الاختبارات:
![]() |
هذا المشروع مشابه لمشروع التهيئة [oracle-config-jpa-openjpa] للطبقة JPA OpenJpa في Oracle SGBD (انظر الفقرة 10.5). في الواقع، يستخدم كلا المشروعين SGBD تسلسلات لتوليد المفاتيح الأولية. ولا يوجد سوى تعديل واحد يجب إجراؤه. وهو موجود في تعريف البين [jpaVendorAdapter] الخاص بالفئة [ConfigJpa]:
// المزود JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- السطر 6: يتم إعلام التنفيذ JPA بأنه سيعمل مع قاعدة بيانات PostgreSQL. وبالتالي، ستتبنى عملية التنفيذ JPA أنواع البيانات الخاصة، بالإضافة إلى SQL المالك لـ SGBD.
وبعد إجراء هذه التعديلات، يجب أن ينجح تنفيذ التكوين [spring-jpa-generic-JUnitTestDao-openjpa].
![]() | ![]() |
11.4. تكوين طبقة Hibernate JPA
![]() | ![]() |
ملاحظة: قم بتنفيذ الأمر [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.
مشروع [postgresql-config-jpa-hibernate] مشابه لمشروع [oracle-config-jpa-hibernate] (الفقرة 10.4) مع نفس التعديلات التي استُخدمت في تحويل [oracle-config-jpa-openjpa] إلى مشروع [postgresql-config-jpa-openjpa] (الفقرة 11.3).
وبعد إجراء هذه التعديلات، يجب أن ينجح تنفيذ التكوين [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink].
11.5. تكوين الطبقة JPA EclipseLink
![]() | ![]() |
ملاحظة: قم بتنفيذ [Alt-F5] لإعادة إنشاء جميع مشاريع Maven.
مشروع [postgresql-config-jpa-eclipselink] مشابه لمشروع [oracle-config-jpa-eclipselink] (الفقرة 10.3) مع نفس التعديلات التي استند إليها نقل المشروع [oracle-config-jpa-openjpa] إلى المشروع [postgresql-config-jpa-openjpa] (الفقرة 11.3).
وبعد إجراء هذه التعديلات، يجب أن ينجح تنفيذ التكوين [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink].



























