[SpringBoot] JPA Repository란?
🟣 Repository
(1) Repository란?
- Entity에 의해 생성된 DB에 접근하는 메소드(ex.findAll(), save())들을 사용하기 위한 인터페이스
- 위에서 엔티티를 선언함으로써 데이터베이스 구조를 만들었다면, 여기에 CRUD를 해주는 기능
- 하나의 엔티티 당 하나의 레파지토리 필요하다
- 레파지토리는 interface이고 JpaRepository을 상속받는다.
- 추상메소드를 확인하면 사용할 수 있는 메소드들을 확인할 수 있다.
- Dao와 동일한 개념의 인터페이스
- 미리 검색 메소드를 정의해 두는 것
- 메소드를 호출하는 것만으로 데이터 검색을 할 수 있게 되는 것
- Repository객체를 이용하여 CRUD를 할 수 있다.
- Spring JPA에서 제공하는 Repository라는 인터페이스를 정의해 해당 Entity의 데이터를 사용
(2) Repository 기능
- 회원관리 CRUD
- JDBC가 없는 것이 아니라 JPA가 내부적으로 JDBC를 실행시키는 것임
- save() : Entity등록 혹은 수정 레코드 저장 (insert, update)
- repository.save(Entity)
- 두 가지 의미가 있음 → 둘 중 하나를 선택할 수 있음
- insert into 테이블 values();
- update 테이블 set where Id=?;
- findOne(): primary key로 레코드 한 건 찾기
- fineAll()
- select * from 테이블;
- 전체 레코드 조회
- findById()
- select * from 테이블 where id=?; 상세조회(회원, 상품, 게시글)
- delete(Object Entity): Entity 삭제
- count(): 전체 엔티티의 개수를 리턴함
- existsById()
- 이렇게 실행된 코드를 보이게 하는 것이 Hibernate에서 설정할 수 있음
- 이 외의 메소드들은 여기서 확인이 가능하다. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories
(3) Optional
- Repository를 사용하다 보면 Optional로 반환해야 할 때가 있다.
- Optional는 있어도 혹은 없어도 정상 실행하라는 뜻이다.
- Optional → isPresent() : 존재하느냐?
- Optional → !isPresent() : 존재 않느냐?
(3) JPQL
- repository에 없는 메소드 즉, 복잡한 쿼리문 같은 경우는 직접 메소드를 추가하여 사용할 수도 있다. (JPQL, Native…)
- 직접 쿼리문을 작성할 수도 있지만 LIke Queries in Spring JPA Repositories 예약어를 이용하여 쿼리문을 추가하지 않고 메소드만 추가하여 사용할 수도 있다.
① Repository에 쿼리문 추가
- findByIdList()는 직접 쿼리문을 작성함
- member_id에 해당하는 회원의 모든 게시물 조회
- findByContaining()는 예약어로 메소드만 추가해 주었음
② Service에서 메소드 사용
- findByContentContaining()