JDBC 자바 프로그램에서 데이터베이스에 접속하고 SQL 문을 실행하기 위한 도구
JDBC로 할 경우)
// JDBC
public class UserDaoJdbc {
public User findByName(String name) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
User user = null;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/hello", "user", "password");
String sql = "SELECT id, name, email, age FROM users WHERE name = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
rs = pstmt.executeQuery();
if (rs.next()) {
user = new User();
user.setId(rs.getLong("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
user.setAge(rs.getInt("age"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return user;
}
}
JPA로 할 경우)
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByName(String name);
}
JDBC보다 JPA가 훨씬 간단하고 사용하기 편한 것을 알 수 있음
객체 지향 프로그래밍 언어인 Java와 관계형 데이터베이스 간의 패러다임 불일치 문제를 해결하여 데이터베이스 작업을 객체 지향적으로 수행할 수 있도록 지원하는 ORM
SQL을 직접 작성하지 않고도 객체 조작을 통해 DB 작업을 수행할 수 있도록 표준화된 인터페이스를 제공
JPA는 인터페이스니, 구현체가 있어야하는데 그 구현체는 보통 Hibernate라는 것을 씀
즉, Hibernate는 구현체이므로 Hibernate 설정(=방언, dialect)을 통해 어떤 RDBMS를 사용할지 결정할 수 있음
또한 Hibernate가 실질적인 구현체라는 뜻은 Hibernate가 JDBC를 활용해 DB와 통신을 한다는 뜻이기도 함

JPA조차도 더 쉽게 사용하기 위해 Spring Data JPA를 사용함
일반적으로 JPA = Spring Data JPA