개발 도서 읽기/자바 ORM 표준 JPA 프로그래밍
01 JPA 소개
nnhhmm
2024. 11. 4. 18:46
1.1 SQL을 직접 다룰 때 발생하는 문제점
1) 반복의 문제
- 데이터베이스는 객체 구조와는 다른 데이터 중심의 구조
-> 개발자가 객체지향 애플리케이션과 데이터베이스 중간에서 SQL과 JDBC API를 사용해 직접 변환 작업
-> 문제 발생: 객체를 CRUD하려면 너무 많은 SQL과 JDBC API 코드 발생
2) SQL에 의존 적인 개발
Member객체가 연관된 Team 객체를 사용할수 있을지 없을지는
DAO를 열어서 어떤 SQL이 실행되고 어떤 객체들이 함께 조회되는지 일일이 확인해야한다.
-> 이것은 진정한 의미의 계층분할이 아니다.
-> 모든것을 SQL에 의존하는 상황에서 개발자들이 엔티티를 신뢰하고 사용할 수 없다.
3) JPA와 문제 해결
JPA를 사용하면 객체를 데이터베이스에 저장하고 관리할 때, 개발자가 직접 SQL을 작성하는 것이 아니라
JAP가 제공하는 API를 사용하면 된다.
- JPA가 제공하는 CRUD API
jpa.persist(member) // 저장
- 저장 기능 : JPA가 객체와 매핑정보를 보고 적절한 INSERT SQL을 생성 후 데이터베이스에 전달
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId); // 조회
- 조회 기능 : JPA가 객체와 매핑정보를 보고 적절한 SELECT SQL을 생성 후 데이터 베이스에 전달
그 결과 Member객체를 생성해서 반환
Member member = jpa.find(Member.class, memberId);
member.setName("이름변경"); // 수정
- 수정 기능: JPA는 별도의 수정 메소드를 제공하지 않음.
대신 객체 조회 후 값을 변경만 하면 트랜잭션을 커밋할 때 데이터베이스에 적절한 UPDATE SQL이 전달
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam(); // 연관된 객체 조회
- 연관된 객체 조회: JPA는 연관된 객체를 사용하는 시점에 적절한 SELECT SQL을 실행한다.