WEB JAVA SPRING/etc

Spring Data JPA(Java Persistence API)

sshhhh 2023. 8. 28. 11:05

 

#Spring Data JPA -- java persistence API

자바를 이용해서 데이터를 관리하는 기법

  ->자바 ORM기술에 대한 API표준

- ORM : Object Relational Mapping -- 객체와 관계형 데이터베이스를 매핑해주는 것

 

객체지향과 관계형 데이터베이스간의 패러다임의 불일치를 해결

- 기존 JDBC를 이용해 직접 구현하던걸 대신 처리해주는 추상화된 계층의 구현스펙

- DB처리를 JPA계층에서 처리

- 엔티티 : DB상에서 데이터로 관리하는 대상 (하나의 클래스or인스턴스)

- 과거 DAO==Repository

- PagingAndSortingRepository<T,ID> > CrudRepository<T,ID> Repository<T,ID>

           페이징+검색처리                    crud                              기능이랄게 없음 

 

 

장점

1. 특정 DB에 종속되지 않음

2. 객체지향적 프로그래밍

3. 생산성 향상

 

단점

1. 복잡한 쿼리 처리 -> JPQL

2. 매핑설계 잘못됐을 시 성능저하

 

 

엔티티

DB 테이블에 대응하는 클래스

 

엔티티 매니저 팩토리

엔티티매니저 인스턴스를 관리하는 주체

 

엔티티 매니저

영속성 컨텍스트에 접근하여 엔티티에 대한 DB작업을 제공한다.

-find() : 영속성 컨텍스트에서 엔티티를 검색, 없을 경우 DB에서 데이터를 찾아 영속성 컨텍스트에 저장

-persist() : 엔티티를 영속성 컨텍스트에 저장

-remove() : 엔티티 클래스를 영속성 컨텍스트에서 삭제

-flush() : 영속성 컨텍스트에 저장된 내용을 DB에 반영

 

영속성 컨텍스트

엔티티를 영구 저장하는 환경

 

#JPA 어노테이션

@id 기본키 , @GeneratedValue와 같이 이용해 어떤 전략으로 생성하는지 명시
@GeneratedValue 기본키 생성 전략
-AUTO : 특정 DB에 맞게 자동으로 생성
-IDEMTITY : 기본키 생성 방식 자체를  DB에 위임(mysql)
-SEQUENCE :  DB시퀀스를 이용해서 식별키 생성(오라클)
-TABLE : 별도의 키를 생성해주는 채번(번호를 취할 목적으로 만든 테이블) 이용하는 방식
@Column DB테이블을 구성할때 인스턴스 변수가 칼럼이 된다.
필요시 칼럼명 별도지정, 기타 등등 조건 추가 하기 위해 사용
@Table 테이블명 지정
@Entity 엔티티임을 명시. 반드시 설정

 

 

#JPA 연관관계

- ex) 게시물<->댓글

- 더미테이블(가짜데이터) 이용해 테이블 구조 설계 -> 데이터 세보며 관계파악

<구분>

- 일대일 @OneToOne

- 일대다 @OneToMany

  ex) 회원입장 : 한명의 회원, 여러번 구매 가능

- 다대일 @ManyToOne

  ex) 구매입장 : 구매는 회원에 의해 이루어짐

- 다대다 @ManyToMany

 

<방향>

- 단방향 참조 : 한쪽 클래스만이 다른 클래스의 인스턴스를 참조하도록 설정

- 양방향 참조 : 양쪽 클래스 모두 다른 클래스 참조

 

<예>

[일대다, 다대일(가장 많이 사용) ,단방향]

- 회원<-프로필 사진

- 자료실->첨부파일

[일대다, 다대일, 양방향]

- 게시물<->댓글

 

 

#★모든 연관관계는 지연로딩으로 설정★


@XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로  직접 지연로딩으로 설정해야 한다.