JDBC versus JPA
Remplace le vaste code répétitif de JDBC par le mapping objet-relationnel et l'EntityManager de JPA.
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"));
}
}
@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();
}
Mapping d'objets
Les entités sont de simples classes annotées — sans traduction manuelle de ResultSet en objet.
Requêtes avec sécurité de types
JPQL opère sur les types et champs d'entités plutôt que sur des chaînes de tables et colonnes brutes.
Cache intégrée
Les caches de premier et second niveau réduisent automatiquement les allers-retours vers la base de données.
Disponible depuis Jakarta EE 8 / Java 11
JPA (Jakarta Persistence API) mappe les objets Java aux lignes de base de données, éliminant le traitement manuel de ResultSet et la concaténation de chaînes SQL. EntityManager fournit find(), persist() et des requêtes JPQL pour travailler avec des objets de domaine plutôt que du SQL brut, tandis que le conteneur gère le pool de connexions et les transactions.