Enterprise 고급

JDBC ResultSet 매핑 대 JPA Criteria API

수동 JDBC ResultSet 매핑을 JPA의 타입 안전 Criteria API로 대체합니다.

✕ 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();
}
이 코드에 문제가 있나요? 알려주세요.
🔒

타입 안전 쿼리

Criteria 빌더는 컴파일 시점에 필드 이름 및 타입 불일치를 잡습니다.

🗺️

자동 매핑

JPA는 결과 행을 엔티티 객체에 매핑합니다 — 열별 수동 추출이 없습니다.

🧩

조합 가능한 조건자

동적 where 절이 and(), or()와 재사용 가능한 Predicate 객체로 깔끔하게 구축됩니다.

이전 방식
JDBC ResultSet
모던 방식
JPA Criteria API
JDK 버전
11
난이도
고급
JDBC ResultSet 매핑 대 JPA Criteria API
사용 가능

Jakarta EE 8 / Java 11 이후 널리 사용 가능

원시 JDBC는 SQL 문자열 구축, 인덱스로 매개변수 설정, 열별 ResultSet에서 객체로의 수동 매핑이 필요합니다. JPA Criteria API는 타입 안전 쿼리 구축과 자동 엔티티 매핑을 제공합니다.

공유 𝕏 🦋 in