Skip to content

11. PostgreSQL 9.4

اکنون به انتقال کاری که با Oracle انجام شده به PostgreSQL 9.4 می‌پردازیم.

11.1. راه‌اندازی محیط کار

11.1.1. محیط اکلیپس

ما با محیط اکلیپس زیر کار خواهیم کرد:

  

پروژه‌های PostgreSQL که در بالا فهرست شده‌اند، در پوشه [<exemples>/spring-database-config\postgresql\eclipse] قرار دارند.

توجه: برای بازتولید مجدد تمام پروژه‌های Maven، [Alt-F5] را اجرا کنید.

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>
  • خطوط ۱۸–۲۲: درایور 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 ایجاد می‌کند که به نوبه خود، [PreparedStatement] را با ۵۰۰۰ پارامتر تولید خواهد کرد. 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 از توالی‌ها برای تولید کلیدهای اصلی استفاده می‌کنند. تنها یک تغییر باید انجام شود. این تغییر در تعریف bean [jpaVendorAdapter] از کلاس [ConfigJpa] است:


    // ارائه‌دهنده JPA
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • خط ۶: به پیاده‌سازی JPA دستور داده شده است که با یک پایگاه داده PostgreSQL کار کند. پیاده‌سازی JPA سپس هر دو نوع داده‌ی اختصاصی و SQL را که مالک این SGBD است، به کار خواهد گرفت.

پس از اعمال این تغییرات، اجرای پیکربندی [spring-jpa-generic-JUnitTestDao-openjpa] باید با موفقیت انجام شود.

11.4. پیکربندی لایه Hibernate از JPA

 

توجه: برای بازتولید مجدد تمام پروژه‌های Maven، [Alt-F5] را اجرا کنید.

پروژه [postgresql-config-jpa-hibernate] مشابه پروژه [oracle-config-jpa-hibernate] (بخش 10.4) است، با همان اصلاحاتی که هنگام انتقال [oracle-config-jpa-openjpa] به پروژه [postgresql-config-jpa-openjpa] اعمال شد. (بند ۱۱.۳).

با اعمال این تغییرات، اجرای پیکربندی [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] باید موفقیت‌آمیز باشد.

 

توجه: برای بازتولید مجدد تمام پروژه‌های Maven، [Alt-F5] را اجرا کنید.

پروژه [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] باید با موفقیت انجام شود.