Enterprise Zaawansowany

Mapowanie ResultSet JDBC kontra Criteria API JPA

Zastąp ręczne mapowanie ResultSet JDBC typowo-bezpiecznym Criteria API JPA dla dynamicznych zapytań.

✕ Java EE
String sql = "SELECT * FROM users"
    + " WHERE status = ? AND age > ?";
try (Connection con = ds.getConnection();
     PreparedStatement ps =
             con.prepareStatement(sql)) {
    ps.setString(1, status);
    ps.setInt(2, minAge);
    ResultSet rs = ps.executeQuery();
    List<User> users = new ArrayList<>();
    while (rs.next()) {
        User u = new User();
        u.setId(rs.getLong("id"));
        u.setName(rs.getString("name"));
        u.setAge(rs.getInt("age"));
        users.add(u);
    }
}
✓ Jakarta EE 8+
@PersistenceContext
EntityManager em;

public List<User> findActiveAboveAge(
        String status, int minAge) {
    var cb = em.getCriteriaBuilder();
    var cq =
        cb.createQuery(User.class);
    var root = cq.from(User.class);
    cq.select(root).where(
        cb.equal(root.get("status"), status),
        cb.greaterThan(root.get("age"), minAge));
    return em.createQuery(cq).getResultList();
}
Widzisz problem z tym kodem? Daj nam znać.
🔒

Zapytania z kontrolą typów

Builder Criteria wykrywa niezgodności nazw pól i typów w czasie kompilacji.

🗺️

Automatyczne mapowanie

JPA mapuje wiersze wyników na obiekty encji — bez ręcznego wyciągania kolumna po kolumnie.

🧩

Komponowalne predykaty

Dynamiczne klauzule where budują się przejrzyście za pomocą and(), or() i wielokrotnego użytku obiektów Predicate.

Stare podejście
ResultSet JDBC
Nowoczesne podejście
Criteria API JPA
Od JDK
11
Poziom trudności
Zaawansowany
Mapowanie ResultSet JDBC kontra Criteria API JPA
Dostępne

Szeroko dostępne od Jakarta EE 8 / Java 11

Surowy JDBC wymaga budowania ciągów SQL, ustawiania parametrów przez indeks i ręcznego mapowania każdej kolumny ResultSet — proces podatny na błędy, który psuje się cicho przy zmianach kolumn. Criteria API JPA buduje zapytania programowo za pomocą wzorca buildera z kontrolą typów. Nazwy kolumn są weryfikowane względem modelu encji, mapowanie wyników jest automatyczne, a złożone dynamiczne zapytania składają się przejrzyście bez konkatenacji ciągów.