JPA
자바 진영의 ORM 기술 표준 명세
ORM(Object Relational Mapping)
객체-관계 매핑, 객체지향프로그래밍(OOP)의 클래스와 RDB의 테이블을 자동으로 매핑하는 것을 의미
객체는 객체대로, RDB는 RDB대로 설계하여 ORM이 중간에서 매핑하는 형태
https://geonlee.tistory.com/207
장점
- 완벽한 객체지향적인 코드: 클래스의 메서드를 통해 데이터베이스 조작
- 재사용성, 유지보수, 리팩토리 용이
- DBMS 종속성 ❌
단점
- 객체-관계 간의 불일치: 세분성, 상속성, 일치, 연관성, 탐색
동작 과정
- 애플리케이션과 JDBC 사이에서 동작
조회
저장
장점
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성
> CRUD 간편
- 저장: jpa.persist(class)
- 조회: Class class = jpa.find(class.id)
- 수정: class.setName("변경할 이름")
- 삭제: jpa.remove(class)
- 유지보수
- 패러다임 불일치 해결
개발자가 할 일 | JPA가 처리 | |
저장 | jpa.persist(album); | 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 |
- 성능 최적화
> 1차 캐시 기능
String memberId = "1";
Member member1 = jpa.find(Member.class , memberId); //SQL
Member member2 = jpa.find(Member.class , memberId); //캐시
println(member1 == member2) //true
--> SQL이 1번만 실행되어서 TRUE가 Return
> 쓰기 지연(버퍼링), batch 기능
transasction.begin(); //트랜잭션
emp.persist(memberA);
emp.persist(memberB);
emp.persist(memberC);
// 데이터베이스에 바로 실행X
transaction.commit(); //트랜잭션 커밋시, 데이터베이스에 isnert sql을 보냄
> 지연로딩과 즉시로딩
Member member = memberDAO.find(memberId);
TEAM team = member.getTeam();
STring teamName = team.getName();
// 지연 로딩 --> 각각 실행
SELECT * FROM MEMBER;
SELECT * FROM TEAM;
// 즉시 로딩
SELECT M.*, T.* FROM MEMBER JOIN TEAM
- 지연로딩: 객체가 실제 사용될 때 로딩
- 즉시 로딩: Join SQL로 한번에 연관된 객체까지 미리 조회
'IT > 개발' 카테고리의 다른 글
[Spring] SpringBoot + Kafka 사용 방법 (0) | 2021.10.29 |
---|---|
[Spring] Spring Data JPA 사용 방법 (0) | 2021.10.29 |
[Spring] Spring Cloud 개념 및 핵심 컴포넌트 (0) | 2021.10.01 |
[SpringBoot] Transaction 사용하기 (0) | 2021.09.24 |
[SpringBoot] MyBatis 간단 기초 (0) | 2021.09.22 |