Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Kim ByeungHyun

JPA 심화 본문

Framework/Spring

JPA 심화

sandbackend 2022. 10. 10. 18:50

ORM 

- 백앤드 개발자가 로직 개발에 집중할 수있게 해줌

 

 

JPA 사용 %%유튜브 참고해보자

 

-영속성 컨텍트?

- Entity의 생명주기

- save() 분기처리

- 1차캐쉬

- 쓰기지연

- deleteAll()

- flush

- 변경감지 (Dirty Checking)

Youtube : https://www.youtube.com/watch?v=kJexMyaeHDs&t=925s 

이거보니 이해에 도움이 되는듯하다

 

 

04. 영속성 컨텍스트 1차 캐시 이해

1차 캐시 사용 장점

- db 조회 횟수를 줄임

- 객체 동일성 보장

Entity 삭제

Entity 업데이트 방법 1,2

 

 

05. DB의 연관관계 이해

연관테이블 만들기 User, Food ==> Order / 주로 id(유일한값)값으로한다

 포함관계 1:1 / 1:N / N:N

ERD설계  PK값 기준으로 / 외래키

 

 

06. JPA 연관관계

어노테이션

@OneToMany

@ManytoOne

@OneToOne

@ManyToMany

JPA 코드 구현

항상 Entity 본인 중심으로 관계를 생각!

 

Spting Data JPA

07. Spring Data JPA 이해

조회 생성 삭제 --> 스프링이 대신 작성

Repository 생성

기능

- 생성 save

- 전체조회 findAll

- 개수조회 count

- 삭제 delete

추가기능

- interface만 선언해 주면 , 구현은 Spring Data JPA가 대신!

- 반환형식 메서드 이름 --> jpa의 공식문서 참조

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

 

 

08. 페이징 및 정렬 설계

페이지네이션 혹은 페이징

 

 

09. 페이징 및 정렬 구현

page - 1을 해줘야 정확한 순서로 구현 가능

pageable

정렬? 몇개? 몇번?

 

 

JPA 활용

10. 폴더기능

11. 폴더 테이블 설계

1) 폴더명

2) 회원ID

userId 가 회원 id값 이라는 사실은 일반 유저는 모른다.

회원과 폴더의 관계

회원->폴더 조회

폴더->회원 조회

 

 

12. JPA 연관관계를 이용한 폴더 테이블 설계

-회원관점

@OneToMany

List<Folder> folders = user.getFolders();

-폴더관점

@ManyToOne

folder.getUser();

 

객체의 관계를 맺어주면, DB의 관계 설정 맺어줌 (알아서)

-자바, SQL쿼리 >> 스프링 개발자에게 편의성을 안겨주었네

 

JPA 연관관계 Colum 설정방법

- @JoinColumn

>> 두가지의 옵션 : 외래키의 이름, 폴더의 존재(기본값은 flase) 

 

 

13. 폴더 생성 기능 구현

생성POST - 생성할폴더명들JSON - 조회GET

-서버 구현

1) 회원의 폴더 생성

2)  회원이 저장한 폴더 조회

 

+@AutenticationPrincipal : 로그인한 회원의 상세 정보를 담고있는 형식 (details)

 

 

14. 관심상품에 폴더 추가 구현

폴더 전체 조회 및 선택

상품 폴더 = N:N

폴더전체조회GET - 폴더추가POST

 

+@Transactional :

aop의 등장? 프록시 객체의 생성? 

트랜잭션 시작 -> 타겟 메서드 실행 -> 프랜잭션 종료

- 빈 생성시, @Transection 에너테이션이 있으면, 프록시 객체가 빈으로 등록된다

- 스프링이 제공하는 선언적 트랜직션 관리를 통해, 

  서비스 레이어에 트랜잭션 관련된 코드 혹은 특정 기술에 종속된 코드를 분리했다.

https://www.youtube.com/watch?v=taAp_u83MwA 

 

 

15. 폴더 별 관심 상품 조회 구현

페이징을 이용한 구현

getProdictsInFolder : 파라미터(몇번,몇개,정렬), 폴더id, 디테일

조회

pageable

 

 

16. 폴더명 중복 피해서 폴더생성

 

 

더 찾아보면 좋을 키워드들에 대한 힌트에요!

1. JPA ORM

2. JPA Data Query, QueryDSL

 

 

 

 

 

++참고++

 

 

2장.
자바는 객체지향언어이고 데이터 베이스는 SQL언어이다.
둘의 패러다임의 불일치를 해결하기 위해 ORM이 존재한다. 자바의 ORM은 JPA이고
JPA는 인터페이스로, 명세서라고 할 수 있다.
이러한 JPA를 구현한 구현체가 hibernate이다.

1차캐시의 개념
꼭 알아두시고
연관관계가 어떻게 되어있는지 다시 한번 살펴보시기 바랍니다.

@OneToMany ....
페이징은 코드를 눈에 익히고, 복붙을 잘 할 수 있을 정도면 O