Skip to content

11. PostgreSQL 9.4

Şimdi, Oracle ile yapılanların PostgreSQL 9.4'e taşınmasına geçiyoruz.

11.1. Çalışma ortamının kurulması

11.1.1. Eclipse ortamı

Aşağıdaki Eclipse ortamında çalışacağız:

  

Yukarıdaki PostgreSQL projeleri, [<exemples>/spring-database-config\postgresql\eclipse] klasöründe bulunur.

Not: Tüm Maven projelerini yeniden oluşturmak için [Alt-F5] komutunu çalıştırın.

11.1.2. Veritabanlarının Oluşturulması

Bundan sonraki tüm işlemlerde, PostgresSQL veritabanlarına bağlantı, [postgres / postgres] kimlik bilgileriyle yapılır. PostgreSQL'i ve istemcisi [PgManager]'i başlatın (bkz. paragraf 23.7).

  • [1]'te, SQL ve [<exemples>\spring-database-config\postgresql\databases\dbproduits.sql] komut dosyaları yüklenecektir;
  • [2]'e yüklenecektir; Oracle'da olduğu gibi, JPA katmanları birincil anahtarları oluşturmak için diziler kullanır. Burada, [produits_sequence] dizisi, [produits] tablosunun birincil anahtarlarını oluşturur;

Şimdi şu yapılandırmaları çalıştırın:

  • [spring-jdbc-generic-01.IntroJdbc01];
  • [spring-jdbc-generic-01.IntroJdbc02];
  • [spring-jdbc-generic-03.JUnitTestDao1];
  • [spring-jdbc-generic-03.JUnitTestDao2];

Hepsi başarılı olmalıdır.

Şimdi [dbproduitscategories] veritabanını oluşturalım. [dbproduits]'i oluşturmak için uygulanan prosedürü [dbproduitscategories] için de tekrarlayın. Yüklenecek SQL komut dosyası, [<exemples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql] konumunda bulunur;

  

Şimdi, aşağıdaki yapılandırmaları uygulayın:

  • [spring-jdbc-generic-04.JUnitTestDao];
  • [spring-jpa-generic-JUnitTestDao-openjpa];

Her ikisi de başarılı olmalıdır.

11.2. JDBC katmanının yapılandırılması

 

[postgresql-config-jdbc] projesi, aşağıdaki test mimarisinin [JDBC] katmanını yapılandırır:

Bu proje, SGBD MySQL'in JDBC katmanına ait [mysql-config-jdbc] yapılandırma projesine benzemektedir (bkz. paragraf 3.3). Burada yalnızca değişiklikleri sunuyoruz:

[pom.xml] dosyası, PostgreSQL'ten JDBC sürücüsünü içe aktarmaktadır:


<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>
        <!-- değişken bağımlılıklar ********************************************** -->
        <!-- SGBD'in JDBC sürücüsü -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>        
      <!-- sabit bağımlılıklar ********************************************** -->
        ...
    </dependencies>
...
</project>
  • 18-22. satırlar: PostgreSQL dosyasından JDBC sürücüsü;

İkinci değişiklik, veritabanlarına erişim kimliklerini tanımlayan [ConfigJdbc] sınıfındadır:


    // bağlantı parametreleri
    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";

Yapılabilecek üçüncü değişiklik, bir [PreparedStatement]'in destekleyebileceği maksimum parametre sayısıyla ilgilidir:


    // bir [PreparedStatement]'in maksimum parametre sayısı
    public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;

[JUnitTestPushTheLimits] testi, 5000 ürün üzerinde SQL emirleri oluşturur ve bu emirler 5000 parametre içeren [PreparedStatement]'leri üretir. MySQL bu değeri desteklemişti. PostgreSQL de desteklemişti.

Dördüncü değişiklik ise daha şaşırtıcı:


public final static String TAB_PRODUITS_ID = "id";
public final static String TAB_CATEGORIES_ID = "id";    

[ID] tablosundaki sütun adları, [CATEGORIES] ve [PRODUITS] tablolarında, [spring-jdbc-04] projesi için küçük harflerle yazılmalıdır. Aksi takdirde, bu projenin aşağıdaki iki bean'ını kullanan komutlarda bir çökme meydana gelir:


    // ürün ekleme
    @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);
    }

    // kategori ekleme
    @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 katmanının yapılandırılması OpenJpa

 

[postgresql-config-jpa-openjpa] projesi, test mimarisinin [JPA] katmanını yapılandırır:

Bu proje, Oracle'ın SGBD katmanındaki JPA ve OpenJpa katmanlarının [oracle-config-jpa-openjpa] yapılandırma projesine benzerdir (bkz. paragraf 10.5). Aslında, her iki SGBD de birincil anahtarları oluşturmak için diziler kullanır. Yapılması gereken tek bir değişiklik vardır. Bu değişiklik, [ConfigJpa] sınıfındaki [jpaVendorAdapter] bean tanımında yer almaktadır:


    // JPA sağlayıcısı
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
        openJpaVendorAdapter.setShowSql(false);
        openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
        openJpaVendorAdapter.setGenerateDdl(true);
        return openJpaVendorAdapter;
}
  • 6. satır: JPA uygulamasına, PostgreSQL veritabanıyla çalışacağı belirtilir. JPA uygulaması, bu SGBD'in sahibi olan SQL'in yanı sıra özel veri türlerini de devralacaktır.

Bu değişiklikler yapıldıktan sonra, [spring-jpa-generic-JUnitTestDao-openjpa] yapılandırmasının yürütülmesi başarılı olmalıdır.

11.4. JPA Hibernate katmanının yapılandırılması

 

Not: Tüm Maven projelerini yeniden oluşturmak için [Alt-F5] komutunu çalıştırın.

[postgresql-config-jpa-hibernate] projesi, [oracle-config-jpa-hibernate] projesine (10.4. paragraf) benzerdir ve [oracle-config-jpa-openjpa] projesinin [postgresql-config-jpa-openjpa] projesine taşınmasında uygulanan değişikliklerin aynısı bu projede de yapılmıştır (11.3. paragraf)

Bu değişiklikler yapıldıktan sonra, [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] yapılandırmasının çalıştırılması başarılı olmalıdır.

 

Not: Tüm Maven projelerini yeniden oluşturmak için [Alt-F5] komutunu çalıştırın.

[postgresql-config-jpa-eclipselink] projesi, [oracle-config-jpa-eclipselink] projesine (10.3. paragraf) ve [oracle-config-jpa-openjpa] projesinin [postgresql-config-jpa-openjpa] projesine taşınmasında yapılan değişikliklerin aynısı uygulanmıştır (paragraf 11.3).

Bu değişiklikler yapıldıktan sonra, [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] yapılandırmasının çalıştırılması başarılı olmalıdır.