11. PostgreSQL 9.4
Тепер ми переходимо до перенесення на PostgreSQL 9.4 того, що було зроблено з Oracle.
![]() |
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]. Повторіть для [dbproduitscategories] процедуру, виконану для створення [dbproduits]. Скрипт 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 (див. розділ 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. Конфігурація шару JPA Hibernate
![]() | ![]() |
Примітка: виконайте команду [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] має пройти успішно.



























