Enterprise Средний

Замените многословный шаблонный код JDBC на объектно-реляционное отображение JPA и EntityManager.

✕ Java EE
String sql = "SELECT * FROM users WHERE id = ?";
try (Connection con = dataSource.getConnection();
     PreparedStatement ps =
             con.prepareStatement(sql)) {
    ps.setLong(1, id);
    ResultSet rs = ps.executeQuery();
    if (rs.next()) {
        User u = new User();
        u.setId(rs.getLong("id"));
        u.setName(rs.getString("name"));
    }
}
✓ Jakarta EE 8+
@PersistenceContext
EntityManager em;

public User findUser(Long id) {
    return em.find(User.class, id);
}

public List<User> findByName(String name) {
    return em.createQuery(
        "SELECT u FROM User u WHERE u.name = :name",
        User.class)
        .setParameter("name", name)
        .getResultList();
}
Заметили проблему в этом коде? Сообщите нам.
🗺️

Объектное отображение

Сущности — это простые аннотированные классы, не требующие ручного преобразования ResultSet в объект.

🔒

Типобезопасные запросы

JPQL работает с типами и полями сущностей, а не с сырыми строками таблиц и столбцов.

Встроенное кэширование

Кэши первого и второго уровня автоматически снижают количество обращений к базе данных.

Старый подход
JDBC
Современный подход
JPA EntityManager
Начиная с JDK
11
Сложность
Средний
JDBC против JPA
Доступно

Широко доступно начиная с Jakarta EE 8 / Java 11

JPA (Jakarta Persistence API) отображает Java-объекты на строки базы данных, устраняя необходимость в ручной обработке ResultSet и конкатенации SQL-строк. EntityManager предоставляет методы find(), persist() и JPQL-запросы, позволяя работать с доменными объектами вместо сырого SQL, пока контейнер управляет пулом соединений и транзакциями.