일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Airflow
- Spring
- 토비의 스프링
- workflow
- JPA
- CodeDeploy
- Action
- java
- immutable
- redis
- string
- db
- JUnit
- Github
- mutable
- springboot
- git
- aws
- build_test
- EC2
- template
- 알고리즘
- QueryDSL
- 사이드 프로젝트
- rds
- kotlin
- compiler
- AOP
Archives
- Today
- Total
개발 일기
1장 - JPA 소개 본문
노션을 참고하면 더욱 좋은 포맷으로 보실 수 있습니다.
JPA 소개
JPA?
- Java Persistence API
- 바자 진영의 ORM 기술 표준
ORM?
- Object-relational mapping (객체 관계 매핑)
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
- 대중적인 언어는 대부분 ORM 기술이 존재
JPA를 왜 사용해야 하는가?
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성
- 유지보수
- 패러다임의 불일치 해결
- 성능
- 데이터 접근 추상화와 벤더 독립성
- 표준
생산성 - JPA와 CRUD
정말 간단해지는 CRUD
- 저장: jpa.persist(member)
- 조회: Member member = jpa.find(memberId)
- 수정: member.setName("변경할 이름")
- 삭제: jpa.remove(member)
유지보수
Member 에서 Tel 이 빠진다면 기존 mybatis 같은 경우 모든 쿼리를 변경해야 겠지만
JPA를 사용한다면 매번 쿼리를 수정할 필요 없이 Entity 만 수정해도된다.
public class Member {
private String memberId;
private String name;
private String tel;
}
INSERT INTO MEMBER(MEMBER_ID, NAME, TEL) VALUES...
패러다임의 불일치 해결
기존의 mybatis처럼 매번 매핑하거나 null 체크를 할 필요없이 jpa가 해결해줌
지연 로딩과 즉시 로딩
- 지연 로딩: 객체가 실제 사용될 때 로딩
- 즉시 로딩: JOIN SQL 로 한번에 연관된 객체까지 미리 조회
// 지연
Member member = memberDAO.find(memberId);
Team team = member.getTeam();
String teamName = team.getName();
//Query
SELECT * FROM MEMBER ....
SELECT * FROM TEAM ...
객체가 사용될떄 쿼리를 날림
//즉시
Member member = memberDAO.find(memberId);
Team team = member.getTeam();
String teamName = team.getName();
//Query
SELECT M.* , T.* FROM MEMBER JOIN TEAM...
미리 조회
'Spring > JPA' 카테고리의 다른 글
6장 - JPA 고급 매핑 (0) | 2022.01.15 |
---|---|
5장 - JPA 다양한 연관관계 매핑 (0) | 2022.01.15 |
4장 - JPA 연관관계 매핑 (0) | 2022.01.15 |
3장 - JPA 엔티티 매핑 (0) | 2022.01.15 |
2장 - JPA 내부 구조 (0) | 2022.01.15 |