티스토리 뷰
- 객체 CRUD
public class Member{
private String memberId;
private String name;
private String tel;
...
}
여기서 tel을 추가할 경우 모든쿼리에 tel 컬럼을 추가해 주어야 한다.
- 엔티티 신뢰 문제
- getTeam(), getOrder(), getDelivery() 를 가져올 수 있는지 확인해야함
- SQL 에 의존적인 개발을 피하기 어려움
- 패러타임의 불일치
- 객체 vs 관계형 데이터베이스
- 관계형 데이터베이스
- 데이터를 잘 저장하는 것이 목표
- 객체(OOP)
- 데이터를 저장하는 관점이 아니라 어떻게하면 잘 추상화하고 관리를 잘할지가 관건
- 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공함
- 관계형 데이터베이스
- 객체 vs 관계형 데이터베이스
- 객체지향적으로 개발할수록 매핑수가 많아진다.
- ORM
- Object-relational mapping(객체 관계 매핑)
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
- 대중적인 언어에는 대부분 ORM 기술이 존재
- JPA는 어플리케이션과 JDBC 사이에서 동작
- JPA는 표준명세
- JPA는 인터페이스의 모음
- 하이버네이트, EclipseLink, DataNucleus
- Mybatis, Ibatis 는 매핑은 알아서해주지만 쿼리를 짜야한다.
- JPA를 왜 사용해야 하는가?
- 생산성
- 저장: jpa.persist(member)
- 조회: Memer member = jpa.find(memberId)
- 수정: member.setName("변경할 이름")
- 삭제: jpa.remove(member)
- 유지보수
- 기존: 필드 변경시 모든 SQL 수정하지 않아도 됨
- JPA: 필드만 추가하면 됨, SQL은 JPA가 처리
- JPA와 상속
- 저장
- 개발자가 할일
- jpa.persist(album);
- 나머지는 JPA가 처리
- INSERT INTO ITEM ...
- INSERT INTO ALBUM ...
- 개발자가 할일
- 조회
- 개발자가 할일
- Album album = jpa.find(Album.class, albumId);
- 나머지는 JPA가 처리
- SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID
- 개발자가 할일
- 저장
- JPA 와 연관관계, 객체 그래프 탐색
- 연관관계 저장
- member.setTeam(team);
- jpa.persist(member);
- 객체 그래프 탐색
- Member member = jpa.find(Member.class, memberId);
- Team team = member.getTeam();
- 연관관계 저장
- 신뢰할 수 있는 엔티티, 계층
- JPA와 비교하기
- Java 컬렉션에 넣었다뻈다하는 형식으로 동작됨
- 생산성
- JPA의 성능 최적화 기능
- 1차 캐시와 동일성 보장
- 첫번째는 SQL 두번째는 캐시에서 조회
- 트랜잭션을 지원하는 쓰기 지연 - INSERT
- 트랜잭션을 커밋할 때까지 INSERT SQL 을 모음
- JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
- 커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보낸다.
- transaction.commit();
- 지연 로딩과 즉시 로딩
- 지연 로딩: 객체가 실제 사용될 때 로딩
- 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회
- 1차 캐시와 동일성 보장
'JPA' 카테고리의 다른 글
[JPA] 기초와 매핑 (0) | 2020.05.27 |
---|---|
[JPA] 필드와 컬럼 매핑 (0) | 2020.05.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구조체
- stackframe
- server side rendering
- 자료구조
- 병행프로세스
- Stack
- 동적프로그래밍
- 인접리스트
- BFS
- 최단경로
- C
- 배열
- client side rendering
- 퀵정렬
- 스텍
- dfs
- react
- 세마포어
- C++
- 인접행렬
- 재귀함수
- 소프트웨어
- 운영체제
- 입출력장치
- Java
- 이진탐색
- javascript
- 클래스
- 교착상태
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함