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.
11.5. JPA katmanının yapılandırılması EclipseLink
![]() | ![]() |
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.



























