#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) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다.
'WEB JAVA SPRING > etc' 카테고리의 다른 글
Spring 어노테이션 (0) | 2023.08.28 |
---|---|
Spring Security 인증/인가 (0) | 2023.08.28 |
REST API (0) | 2023.08.28 |
JVM (0) | 2023.08.24 |
자바 & DB 연결 (2) | 2023.08.24 |