자바 ORM 표준 JPA 프로그래밍 - 기본편 (1)

2991 단어 JPAJPA

이 글은 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 듣고 정리한 내용입니다.

📌 ORM 이란?

👉🏻 object relational mapping (객체 관계 매핑)
👉🏻 객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스 대로 설계하는 대신, ORM 프레임워크가 중간에서 둘을 매핑 시켜 줌. 즉, 둘의 차이를 ORM이 조정시켜 준다는 뜻이다.

📌 JPA 동작 방식

JAVA 애플리케이션이 JPA에게 명령하면 JPA가 JDBC API를 사용하여 데이터베이스에 접근하여 결과를 가져오는 방식으로 동작한다.

🔎 저장

MemberDAO에서 JPA에게 멤버객체를 넘기면 JPA가 Entity를 분석하고, Insert SQL문을 생성한다. JPA가 JDBC API를 사용하여 데이터베이스에 접근하여 결과를 가져온 후 반환한다.

🔎 조회

MemberDAO에서 찾고자 하는 Entity의 id를 넘기면 JPA는 select sql문 생성한다. JPA가 JDBC API를 사용하여 데이터베이스에 접근하여 결과를 가져온 후 반환한다.

📌 JPA의 필요성

🔎 생산성

  • 저장 : jpa.persist(member)
  • 조회 : Member member = jpa.find(memberId)
  • 수정 : member.setName(“변경할 이름”)
  • 삭제 : jpa.remove(member)

🔎 패러다임의 불일치 해결

👉🏻 상속 (저장)

jpa.persist(album);

JPA가 Insert문을 두개로 쪼개서, item 테이블, album 테이블 각각에 쿼리를 날린다.

👉🏻 상속 (조회)

Album album = jpa.find(Album.class, albumId);

JPA는 item, album 테이블을 join해서 가져오는 sql 쿼리를 날린다.

👉🏻 연관관계, 객체 그래프 탐색

//연관관계 저장
member.setTeam(team);
jpa.persist(member);
//객체 그래프 탐색
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();

JPA를 사용하면 자유롭게 객체 그래프 탐색이 가능하다.

👉🏻 비교하기

Member member1 = jpa.find(Member.class, memberId);
Member member2 = jpa.find(Member.class, memberId);

member1과 member2는 같다!! 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장하기 때문이다.

🔎 JPA 성능 최적화

👉🏻 트랜잭션을 지원하는 쓰기지연 - INSERT

  1. 트랜잭션을 커밋할 때까지 INSERT SQL을 모은다.
  2. JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송한다.
transaction.begin();	//트랜잭션 시작 

em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
//INSERT SQL을 데이터베이스에 보내지 않는다.

transaction.commit();	//커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보낸다

👉🏻 지연 로딩, 즉시 로딩

  • 지연 로딩 : 객체가 실제 사용될 때 데이터베이스에 SQL 쿼리 보낸다.
Member member = memberDAO.find(memberId);	//select * from member
Team team = member.getTeam();
String teamName = team.getName();	//select * from team 
  • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회한다.

Member member = memberDAO.find(memberId); // 이때 member, team 테이블 둘 다 조회 
Team team = member.getTeam();
String teamName = team.getName();

좋은 웹페이지 즐겨찾기