Spring DATA JPA 란?
JPA 를 쉽게 사용할수 있게 만들어 놓은 모듈.

JPA를 추상화시킨 Repository 인터페이스를 제공합니다
Repository 인터페이스는 Hibernate와 같은 JPA구현체를 사용해서 구현한 클래스를 통해 사용됩니다.
개발자들은 Repository 인터페이스를 통해 JPA를 간편하게 사용할 수 있게 되었습니다.
우리는 raw JPA 를 사용 했습니다, (.persist(). find() 같은거)..

Spring Data JPA 사용 방법:
JpaRepository 등록 <"@Entity 클래스", "@Id 의 데이터 타입">

( Spring Data JPA에 의해 자동으로 Bean 등록이 되었습니다. )
제네릭스의 @Entity 클래스 위치에 Memo Entity(객체) 를 추가했기 때문에 해당 MemoRepository는 DB의 memo 테이블과 연결되어 CRUD 작업을 처리하는 인터페이스가 되었습니다.
예시: 메모장 프로젝트 Spring Data JPA 적용
1. 새로운 인터페이스 MemoRepository_Spring_Data_JPA :
public interface MemoRepository_Spring_Data_JPA extends JpaRepository<Memo, Long> {
}
( JpaRepository<> 안에 이미 @Repository 가 선언 되어 있음. )
2.새로운 서비스 객체
memoService_SPRING_DATA_JPA.java
MemoRepository_Spring_Data_JPA 를 받아옴.
@Component
public class memoService_SPRING_DATA_JPA {
private final MemoRepository_Spring_Data_JPA repo; // repository
public memoService_SPRING_DATA_JPA(ApplicationContext applicationContext) {
MemoRepository_Spring_Data_JPA repo = applicationContext.getBean(MemoRepository_Spring_Data_JPA.class);
this.repo = repo; // repository
}
Spring_Data_JPA 가 지원 하는 함수들 :
저장하기 .save(entity);
public MemoResponseDto createMemo(MemoRequestDto requestDto) { // create memo service
Memo memo = new Memo(requestDto);
// DB 저장
memo = repo.save(memo);
// Entity -> ResponseDto
MemoResponseDto memoResponseDto = new MemoResponseDto(memo);
return memoResponseDto;
}
전부다 가져오기 .findAll()
(MemoResponseDto 여서 스트름 사용).
public List<MemoResponseDto> getMemos() {
return repo.findAll().stream().map(MemoResponseDto::new).toList();
}
업데이트 하기 .update(requestDto)
( @Transactional 걸어 줘야함. )
public Long UpdateMemo(long id, MemoRequestDto requestDto) {
// 해당 메모가 DB에 존재하는지 확인
Memo memo = findMemo(id);
// memo 내용 수정
// 객체에 병경하면 자동 Dirty Check 함,
memo.update(requestDto);
return id;
}
삭제 하기 .delete(Entity)
public Long deleteMemo(long id) {
// 해당 메모가 DB에 존재하는지 확인
Memo memo = findMemo(id);
repo.delete(memo);
return id;
}
업데이트 .update(requestDto) 에 @Transactional 걸어 줘야함.
@Transactional
public Long UpdateMemo(long id, MemoRequestDto requestDto) {
// 해당 메모가 DB에 존재하는지 확인
Memo memo = findMemo(id);
// memo 내용 수정
// 객체에 병경하면 자동 Dirty Check 함,
memo.update(requestDto);
return id;
}
p.s..
/////////// 참고로 findMemo(id) 함수는 어떻게 코드 했냐며
private Memo findMemo(Long id){
Memo memo = repo.findById(id).orElseThrow(()->
new IllegalArgumentException("선택하신 메모는 존재하지 않아요")
);
return memo;
}
그리고
'Spring' 카테고리의 다른 글
| Spring 기초 11(마지막) (Spring Data JPA 의 Query Methods) (0) | 2024.01.21 |
|---|---|
| Spring 기초 10 (JPA Auditing (시간 받기)) (0) | 2024.01.21 |
| Spring 기초 8 (SpringBoot 의 JPA) (0) | 2024.01.21 |
| Spring 기초 7 (Entitiy 상태) (Entitiy 영속/비영속 기능) (0) | 2024.01.20 |
| Spring 기초 6 (영속성) (EntityManager) ( Persistence 기능) (변경 감지(Dirty Checking)) (0) | 2024.01.20 |