JAVA/JPA

[ JPA ] - Jpa 기본 사용 방법과 Repository 인터페이스

algml0703 2023. 11. 1. 23:10
반응형

Jpa 기본 사용 방법과 Repository 인터페이스 

1. 의존성 추가

기본적으로 jpa를 사용하기 위해서는 spring-data-jpa를 설치하고, 관련된 설정을 해주어야 하는데,스트링 부트 스타터의 일종인 spring-boot-starter-data-jpa를 의존성 추가해주면 jpa 관련한 라이브러리들과 설정을 해준다. 이와 더불어 데이터베이스와 연결하기 위해 mysql-connector-j를 함께 추가해준다. 즉 build.gradle에 아래와 같이 두 라이브러리를 추가해준다.

그 위에 어노테이션이나 테스트, 스프링 부트 스타터 등은 jpa 사용과 직접적 연관이 있는 것은 아니며, 기본적인 어플리케이션 구성을 위해 필요한 라이브러리들이다. 또한 접속한 데이터베이스 정보를 설정해주어야 하는데, application.yml에 아래와 같이 설정 부분을 추가해주면 된다.

2. 기본 사용 코드

위와 같이 Repository 상속받는 인터페이스를 구현해준다. JpaRepository의 첫 번째 인자로는 저장한 데이터 객체 타입, 두 번째 인자로는 해당 데이터의 key(=id)로 설정하는 타입을 넣어준다.

위와 같이 구현해준 후 데이터 저장이나 조회 시에는 아래와 같이 구현해주면 된다.

참고로 인터페이스에서 save, findById와 같이 기본적인 crud와 같은 메서드들을 제공해주기 때문에 해당 메서드들을 사용하면 된다.

기본적으로 제공되는 메서드 이외의 작업이 필요한 경우에는 아래와 같이 인터페이스에 메서드를 추가로 구현해주면 된다.

* 기본 메서드 종류

  • save(S entity) : 데이터 저장시에 사용, id를 기준으로 하여 해당 데이터가 없는 경우에는 새롭게 데이터를 생성하고, 해당 id에 해당하는 데이터가 존재하는 경우에는 기존의 데이터를 업데이트 한다.
  • findById([id타입] id) : 해당 id의 데이터 조회
  • findAll() : 모든 데이터 조회
  • deleteById() : 해당 id에 해당하는 데이터를 삭제한다.
  • deleteAll() : 테이블의 모든 데이터를 삭제한다.

기본 메서드 이외에 새로운 쿼리 메서드를 생성할 때는 규칙을 지켜서 구현하여야 한다.

* 메서드 생성 규칙

  • findBy~ : 조회 시 사용하며 findBy로 시작하며, 그 뒤에 조건이 온다. ex) findByName, findByRole
  • And, Or, Like, NotLike, GreaterThan, LessThan, IsNull, IsNotNull, Between, In, NotIn 등의 조건 연산자 : 요구되는 조회 조건에 따라 조건 연산자가 함께 사용된다. ex) findByRoleAndName name과 role이 조건인, findByNameLike name이 부분적으로 일치하는 데이터 조회 등...
  • 파라미터 : 인자에는 조회 조건과 같은 타입이 속성명을 넣어준다. ex) findByName(String name); 

또한 위에서는 JpaRepository를 사용하였으나 JpaRepository를 Repository를 상속받은 것으로, JpaRepository 이외에도  Repository를 상속받은 다양한 Repository 인터페이스가 존재한다.

* Repository 종류

  • CrudRepository : 기본적인 crud 작업만 하는 경우 유용하다.
  • JpaRepository : CrudRepository를 확장한 인터페이스로, 동적 쿼리 생성, 스펙 기반 검색, 네이티브 sql 실행 등의 작업이 가능하다. 
  • PagingAndSortingRepository : 페이징 및 정렬 작업이 가능하다.
  • ...

 

spring data jpa : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

반응형

'JAVA > JPA' 카테고리의 다른 글

[ JPA ] - Jpa entity 관련 어노테이션  (0) 2023.11.03