JDBC
- JDBC를 사용하면 DBConnection 클래스에 일일이 코드를 적어서 그 클래스를 인스턴스로 만들어 쓸 때마다 객체를 수동으로 close해야 한다.
- 메서드를 만들 때도 String query = "INSERT INTO ... (?, ?... " 같은 문장을 일일이 적어야 한다.
- SQL문, Connection 객체 관리, PreparedStatement, ResultSet 객체를 통한 조건, 결과값 전달 및 반환
- 즉 자바 어플리케이션과 DB를 jdbc api가 매개해주는 것이다.
JPA
- 자바 어플리케이션과 DB를 JPA가 매개하는 것은 맞는데, SQL 구조를 신경쓰지 않고 평소에 프로그래밍하는 방식으로 SQL 데이터에 접근할 수 있게 한다.
- SQL 문을 직접 자바 어플리케이션 내에서 적을 경우가 적어진다.
DAO 클래스 내에서
@Autowired
ShopRepository shopRepository;
- SQL 구조를 자바 어플리케이션 내에서 적용하지 않아도 된다.
Order 테이블이 Foreign Key로 Member 테이블의 Member Id를 참조하는 경우
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@Column(name = "MEMBER_ID")
private Long memberId;
}
@Entity
@Table(name = "ORDERS")
public class Order {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member // 주문 회원
}
JPA 단점
- 매핑 설계를 잘못했을 때 성능 저하가 발생할 수 있다.
- JPA를 제대로 사용하려면 알아야할 것이 많아서 학습하는데 시간이 오래 걸린다.
- 다수의 테이블 조인시 신경써야 할게 많다.
느낀 점
- 김영한 개발자 님이 저술하신
자바 ORM 표준 JPA 프로그래밍
을 읽어보자.