객체를 관계형 DB에 관리
- 데이터, 객체를 관계형 DB에 보관한다.
- 객체를 관계형 DB에 저장시 SQL을 수많이 사용 => SQL 중심적인 개발의 문제점
SQL에 의존적인 개발을 피하기 어렵다.
객체지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.
객체를 영구보관하는 다양한 저장소들이 존재하지만 현실적인 대안은 관계형 데이터베이스이다.
JPA: Java Persistence API, 자바 진영의 ORM 기술 표준
Object-Relational Mapping(객체 관계 매핑)
JPA는 애플리케이션과 JDBC 사이에서 동작
JPA는 알아서 객체를 분석하여 SQL 문을 만들어준 후 JDBC api를 사용하여 쿼리를 수행해준다. => 마치 자바 컬렉션에 저장하듯이 코드를 작성하면 알아서 쿼리 수행 (패러다임 불일치 해결)
String memberID = "100";
Member m1 = jpa.find(Member.class, memberId); // SQL
Member m2 = jpa.find(Member.class, memberId); // 캐시
println(m1 == m2) // true
transaction.begin(); // 트랜잭션 시작
em.persit(memberA);
em.persist(memberB);
em.persist(memberC);
// 여기까지 INSERT SQL을 데이터베이스에 보내지 않는다.
// 커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보낸다.
transaction.commit(); // 트랜잭션 커밋
// 지연 로딩
Member member = memberDAO.find(memberId); // select * from MEMBER
Team team = member.getTeam();
String teamName = team.getName(); // select * from TEAM
// 즉시 로딩
Member member = memberDAO.find(memberId); // select M.*, T.* FROM MEMBER M JOIN TEAM T ...
Team team = member.getTeam();
String teamName = team.getName();
ORM은 객체와 RDB 두 기둥위에 있는 기술
너 그렇게 열심히 살다간 죽어