JPA. PostgreSQL. Пример работы с БД из Java-программы

Добавлено: 09/05/2017 02:09 |  Обновлено: 27/08/2017 17:15 |  Добавил: nick |  Просмотры: 8725 Комментарии: 1
Вводная часть
Используем Java Persistence API (JPA), входящий в состав Java EE, для связи Java-программы с БД PostgreSQL. В примере, программно, создадим новую запись в таблице и выведем её в консоли.
С примером я работал в ОС Linux, в качестве IDE использовал NetBeans.

Для начала нужно создать новую таблицу в БД, например, можно воспользоваться следующим запросом:
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);
Для работы с БД PostgreSQL создадим новое подключение во вкладке службы. Далее создаем новый проект (Категории: Java; Проекты: Приложение Java). В java-файле проекта добавляем следующий код:
package ваш пакет;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class Класс вашего проекта {

    public static void main(String[] args) {
        //Создает экземпляр Company
        Company comp = new Company(4, "company5", 13, "Boston2", 12.3f);
        //Получает EntityManager и транзакцию
        EntityManagerFactory emf = 
            Persistence.createEntityManagerFactory("JavaStandardApp1PU");
        EntityManager em = emf.createEntityManager();
        //Обеспечивает постоянство Company в базе данных
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        em.persist(comp);
        tx.commit();
        //Выполняет именованный запрос
        comp = em.createNamedQuery("Company.findById", Company.class)
                .setParameter("id", 2)
                .getSingleResult();
        //Закрывает EntityManager и EntityManagerFactory
        em.close();
        emf.close();
        System.out.println(comp.toString());    }
}
В коде мы создаем новую запись в таблице и выводим запись с id = 2 в консоль.

Но код выше сразу работать не будет, поэтому продолжим и создадим класс сущности из БД (Категории: Персистентность; Типы файлов: Классы сущностей из базы данных).

Выберем подключение к БД и доступные таблицы, в нашем случае она одна – company. Далее, на шаге «Классы сущностей» убираем галочку «Создать аннотации JAXB». Так как JAXB (Java API for XML Binding) нам не потребуется.

Жмём кнопку «Готово».

После этого будет создана сущность Company (Company.java) и единица сохраняемости, которую определяет файл persistence.xml.

Имя единицы сохраняемости передается в коде выше:
EntityManagerFactory emf = 
  Persistence.createEntityManagerFactory("JavaStandardApp1PU");
Откроем файл persistence.xml.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="JavaStandardApp1PU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>javastandardapp1.Company</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>
      <property name="javax.persistence.jdbc.user" value="nick"/>
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
      <property name="javax.persistence.jdbc.password" value="nick"/>
    </properties>
  </persistence-unit>
</persistence>
У элемента persistence-unit атрибут name должен иметь значение JavaStandardApp1PU (имя совпадает с названием главного java-файла).

Далее в фале persistence.xml вы можете видеть параметры для подключения к БД.

Теперь откроем файл сущности Company – Company.java. В сгенерированный файл я добавил конструктор со всеми полями из таблицы company:
public Company(Integer id, String name, int age, String address, Float salary) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
        this.salary = salary;
}
А также слегка изменил метод toString() для большей информативности:
public String toString() {
        return "javastandardapp1.Company[ id=" + id + " name=" + name + " age=" + age + " address=" + address + " salary=" + salary + " ]";
}
Теперь, если вы запустите код на выполнение, в консоли вы увидите запись с id = 2, а в таблицу company будет добавлена новая запись.

Оставьте свой комментарий

Комментарии