11. PostgreSQL 9.4
Przechodzimy teraz do przeniesienia na wersję PostgreSQL 9.4 tego, co zostało zrobione w przypadku Oracle.
![]() |
11.1. Konfiguracja środowiska pracy
11.1.1. Środowisko Eclipse
Będziemy pracować w następującym środowisku Eclipse:
![]() |
Powyższe projekty PostgreSQL znajdują się w folderze [<exemples>/spring-database-config\postgresql\eclipse].
Uwaga: należy uruchomić polecenie [Alt-F5], aby ponownie wygenerować wszystkie projekty Maven.
11.1.2. Generowanie baz danych
W dalszej części połączenie z bazami danych PostgresSQL odbywa się przy użyciu danych logowania [postgres / postgres]. Uruchom PostgreSQL oraz jego klienta [PgManager] (patrz punkt 23.7).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() | ![]() |
![]() |
- w pliku [1] zostanie załadowany skrypt SQL [<exemples>\spring-database-config\postgresql\databases\dbproduits.sql];
![]() | ![]() |
![]() |
- do [2]; podobnie jak w przypadku Oracle, warstwy JPA wykorzystują sekwencje do generowania kluczy głównych. W tym przypadku sekwencja [produits_sequence] generuje klucze główne tabeli [produits];
Teraz należy wykonać następujące konfiguracje:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Wszystkie powinny zakończyć się powodzeniem.
Wygenerujmy teraz bazę [dbproduitscategories]. Powtórz dla [dbproduitscategories] procedurę przeprowadzoną w celu utworzenia [dbproduits]. Skrypt SQL, który należy załadować, znajduje się w lokalizacji [<exemples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql];
![]() |
Teraz należy wykonać następujące konfiguracje:
- [spring-jdbc-generic-04.JUnitTestDao];
- [spring-jpa-generic-JUnitTestDao-openjpa];
Obie powinny zakończyć się powodzeniem.
11.2. Konfiguracja warstwy JDBC
![]() | ![]() |
Projekt [postgresql-config-jdbc] konfiguruje warstwę [JDBC] w następującej architekturze testowej:
![]() |
Projekt ten jest analogiczny do projektu konfiguracyjnego [mysql-config-jdbc] warstwy JDBC w ramach SGBD MySQL (patrz punkt 3.3). Przedstawiamy jedynie zmiany:
Plik [pom.xml] importuje sterownik JDBC z pliku 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>
<!-- zmienne zależności ********************************************** -->
<!-- sterownik JDBC dla SGBD -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
<!-- stałe zależności ********************************************** -->
...
</dependencies>
...
</project>
- wiersze 18–22: sterownik JDBC z pliku PostgreSQL;
Druga zmiana dotyczy klasy [ConfigJdbc], która definiuje identyfikatory dostępu do baz danych:
// parametry połączenia
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";
Trzecią zmianą, jaką można wprowadzić, jest zmiana maksymalnej liczby parametrów, które może obsłużyć [PreparedStatement]:
// maksymalna liczba parametrów dla [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
Test [JUnitTestPushTheLimits] generuje zlecenia SQL dla 5000 produktów, które z kolei wygenerują pliki [PreparedStatement] zawierające 5000 parametrów. MySQL obsłużył tę wartość. Podobnie jak PostgreSQL.
Czwarta zmiana jest bardziej zaskakująca:
public final static String TAB_PRODUITS_ID = "id";
public final static String TAB_CATEGORIES_ID = "id";
Nazwy kolumn [ID] w tabelach [CATEGORIES] i [PRODUITS] muszą być zapisane małymi literami w projekcie [spring-jdbc-04]. W przeciwnym razie dochodzi do awarii instrukcji wykorzystujących następujące dwa komponenty tego projektu:
// dodawanie produktu
@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);
}
// dodawanie kategorii
@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. Konfiguracja warstwy JPA OpenJpa
![]() | ![]() |
Projekt [postgresql-config-jpa-openjpa] konfiguruje warstwę [JPA] architektury testowej:
![]() |
Projekt ten jest analogiczny do projektu konfiguracyjnego [oracle-config-jpa-openjpa] warstwy JPA OpenJpa w Oracle SGBD (patrz paragraf 10.5). W rzeczywistości oba projekty SGBD wykorzystują sekwencje do generowania kluczy głównych. Należy wprowadzić tylko jedną zmianę. Znajduje się ona w definicji komponentu [jpaVendorAdapter] klasy [ConfigJpa]:
// dostawca JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- wiersz 6: informujemy implementację JPA, że będzie ona współpracować z bazą PostgreSQL. Implementacja JPA przejmie wówczas zarówno własne typy danych, jak i implementację SQL, która jest właścicielem tej implementacji SGBD.
Po wprowadzeniu tych zmian uruchomienie konfiguracji [spring-jpa-generic-JUnitTestDao-openjpa] powinno zakończyć się powodzeniem.
![]() | ![]() |
11.4. Konfiguracja warstwy Hibernate o numerze JPA
![]() | ![]() |
Uwaga: należy wykonać polecenie [Alt-F5], aby ponownie wygenerować wszystkie projekty Maven.
Projekt [postgresql-config-jpa-hibernate] jest analogiczny do projektu [oracle-config-jpa-hibernate] (punkt 10.4) i zawiera te same modyfikacje, które miały zastosowanie podczas przenoszenia projektu [oracle-config-jpa-openjpa] do projektu [postgresql-config-jpa-openjpa] (punkt 11.3).
Po wprowadzeniu tych zmian konfiguracja [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] powinna zakończyć się powodzeniem.
11.5. Konfiguracja warstwy JPA EclipseLink
![]() | ![]() |
Uwaga: należy uruchomić [Alt-F5], aby ponownie wygenerować wszystkie projekty Maven.
Projekt [postgresql-config-jpa-eclipselink] jest analogiczny do projektu [oracle-config-jpa-eclipselink] (punkt 10.3) i zawiera te same modyfikacje, które miały zastosowanie przy przenoszeniu projektu [oracle-config-jpa-openjpa] do projektu [postgresql-config-jpa-openjpa] (punkt 11.3).
Po wprowadzeniu tych zmian uruchomienie konfiguracji [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] powinno zakończyć się powodzeniem.



























