자바 ORM 표준 JPA 프로그래밍 - 기본편 을 듣고 정리하는 글
ORM(Object-relational Mapping)
- 객체는 객체대로 설계하고 RDB는 RDB대로 설계한다.
- ORM 프레임워크가 중간에서 매핑해주는 역할을 수행한다.
- 애플리케이션과 JDBC 사이에서 동작
- 패러다임의 불일치를 해소시켜준다
- SQL 중심이 아닌 객체 중심으로 개발
- 생산성의 증가
- 유지보수
- 패러다임의 불일치 해결
- 성능 이슈
- 데이터 접근 추상화와 벤더 독립성
저장 : jpa.persist(member)
조회 : Member member = jpa.find(memberId)
수정 : member.setName("name")
삭제 : jpa.remove(member)
기본적인 CRUD가 정의되어 있다.
필드 변경시 해당 필드만 추가하면 됨, SQL은 JPA가 알아서 처리해준다.
jpa.persist(album);
이라는 코드 한 줄 실행하면, 나머지는 JPA가 알아서INSERT INTO ITEM / INSERT INTO ALBUM
라는 쿼리를 날린다.Album album = jpa.find(Album.class, albumId);
라는 코드 한 줄 실행하면, SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID
라는 쿼리를 알아서 실행한다.String memberId = "100";
Member member1 = jpa.find(Member.class, memberId);
Member member2 = jpa.find(Member.class, memberId);
member1 == member2; // true
같은 트랜잭션 내에서 조회한 엔티티는 1차 캐시로 동일성을 보장한다.
String memberId = "100";
Member member1 = jpa.find(Member.class, memberId);
Member member2 = jpa.find(Member.class, memberId);
member1 == member2; // true
조회 쿼리를 한번만 실행함
transaction.begin(); // transaction start
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
// 여기까지 SQL 쿼리 DB에 보내지 않음
// 커밋하는 순간 데이터 베이스에 SQL을 모아서 전송, 네트워크 통신 한번만 하면 됨
transaction.commit(); // transaction commit