JDBC 대 JPA
장황한 JDBC 보일러플레이트를 JPA의 객체-관계 매핑으로 대체합니다.
코드 비교
✕ 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-to-object 변환이 없습니다.
타입 안전 쿼리
JPQL은 원시 테이블과 열 문자열이 아닌 엔티티 타입과 필드에서 작동합니다.
내장 캐싱
1차 및 2차 캐시가 자동으로 데이터베이스 왕복을 줄입니다.
이전 방식
JDBC
모던 방식
JPA EntityManager
JDK 버전
11
난이도
중급
JDK 지원
JDBC 대 JPA
사용 가능
Jakarta EE 8 / Java 11 이후 널리 사용 가능
동작 원리
JPA(Jakarta Persistence API)는 Java 객체를 데이터베이스 행에 매핑하여 수동 ResultSet-to-object 변환을 제거합니다. JPQL 또는 Criteria API로 타입 안전 쿼리를 제공합니다.
관련 문서