Spring JPA

OneTwoThree·2023년 6월 5일
0

springboot

목록 보기
1/9

Spring JPA를 활용해보긴 했는데 정확히 뭔지, 내가 어떻게 쓴건지 잘 몰라서 정리를 한번 해봄

Spring JPA란 ?

  • Java Persistence API를 기반으로 하는 Spring Framework의 일부분
  • JPA는 개발자가 객체지향 프로그래밍 모델로 DB를 다룰수 있게함
  • SPRING JPA는 JPA를 사용해 DB와 상호작용하는데 필요한 작업을 단순화함
  • CRUD 작업을 수행하는 메소드 자동생성
  • 쿼리 메소드를 사용해 DB 검색 간단하게 처리

API란 ?

  • application programming interface
  • 애플리케이션 간 데이터를 교환하고 상호 작용하기 위한 규약, 인터페이스
  • SW 구성요소 간에 상호작용 하기 위한 방법을 정의 한 것
  • API가 일반적으로 갖는 기능들
    • 데이터 요청, 검색
    • 데이터 생성, 수정
    • 데이터 삭제
    • 인증, 권한 부여
    • 파일 업로드, 이메일 발송, 외부 서비스 같은 다양한 기능 제공

활용 예시

  • 엔티티 클래스 정의
  • JpaRepository 클래스를 상속하는 Repository 인터페이스 정의하기
  • 서비스 클래스 정의하기
  • 컨트롤러 클래스 정의하기

어노테이션을 활용해서 스프링 내에서 정의할 수 있다.
이러한 형태를 따라 Jpa를 사용할 수 있다
JPA의 핵심은 Entity와 Repository이다
Entity는 자바 객체를 DB가 이해할 수 있게 만든 것이다
Repository는 이 Entity를 DB에 저장하는 역할이다

@Service
@Slf4j
@RequiredArgsConstructor
public class UserService {

    private final UserRepository repository;
    private final PasswordEncoder encoder;

    //회원가입하기
    @Transactional
    public UserEntity create(UserEntity userEntity){
        if(userEntity == null){
            log.info("userEntity create is error!");
            throw new RuntimeException("UserEntity(Service) create Error");
        }
        String rawPw = userEntity.getPassword();
        userEntity.setPassword(encoder.encode(rawPw));

        return repository.save(userEntity);
    }

서비스 클래스의 메소드에서 db에 저장하기 위해 repository.save를 호출한다. 스프링 JPA를 사용하지 않는다면 SQL 쿼리문을 직접 작성해서 저장해야 할 텐데 이미 선언되어있는 save를 호출해서 그냥 저장하는 것이다.

public interface RoutineRepository extends JpaRepository<RoutineEntity,Long> {

    //user_id가 userId인 루틴을 찾아서 리스트로 반환
    @Query(value = "SELECT * FROM routine WHERE user_id = :userId", nativeQuery = true)
    List<RoutineEntity> findByUserId(Long userId);

}

정의되지 않은 메소드는 이렇게 리포지토리에서 쿼리문을 작성하고 메소드로 만들어서 사용할 수 있다.

0개의 댓글