[SpringBoot] JPA Repository란?

박정현·2023년 10월 26일
2

🌿스프링부트 기능

목록 보기
12/12
post-thumbnail

🟣 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)
    • 두 가지 의미가 있음 → 둘 중 하나를 선택할 수 있음
      1. insert into 테이블 values();
      2. update 테이블 set where Id=?;
  • findOne(): primary key로 레코드 한 건 찾기
  • fineAll()
    • select * from 테이블;
    • 전체 레코드 조회
  • findById()
    • select * from 테이블 where id=?; 상세조회(회원, 상품, 게시글)
  • delete(Object Entity): Entity 삭제
    • delete from where ;
  • 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에서 메소드 사용

  • findByList()

  • findByContentContaining()
profile
개발을 개발괴발하지 않기 위한 노력

0개의 댓글