JPA와 스프링 데이터 JPA

inho ha·2022년 2월 14일
0

JPA 는 반복적인 코드 줄여줌, sql 직접 작성하지 않아도 됨
sql과 데이터 중심의 설계에서 객체 중심의 설계로 가능

JPA 도 스프링 만큼 기술적인 깊이가 있는 기술

JPA 는 자바 표준 인터페이스, 구현은 여러 업체들이 하는 것
각 업체마다 성능이 좋거나 사용하기 좋거나 특징이 있을수 있음

환경 설정

  1. dependencies 에 jpa 추가하고 gradle reset
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  1. application.properites 에 jpa 설정 추가
    spring.jpa.show-sql=true : jpa 가 날린 쿼리 확인
    spring.jpa.hibernate.ddl-auto=none : 테이블 자동 생성 끄기 (이미 테이블 생성 해놨기 때문)

model mapping

@Entity : entity 설정
@Id : pk 설정
@GeneratedValue(strategy = GenerationType.IDENTITY) : db가 값을 자동으로 생성하도록 전략 설정

JPA Repository 작성

pk 기반 select 나 save, update 는 쿼리가 필요 없지만
findByName 이나 리스트를 반환하는 findAll은 createQuery로 쿼리 작성이 필요함

service

데이터를 저장하거나 변경할때는 @Transactional 안에서 실행되어야함

java.lang.IllegalStateException: Failed to load ApplicationContext

spring.datasource.username=sa

스프링 부트 2.4부터 application.properites 에 위 옵션이 없으면 에러가 발생함

스프링 데이터 JPA

스프링 데이터 JPA도 함께 사용하면 레포지포리에 구현 클래스 없이 인터페이스만으로 개발 가능
반복적인 CRUD 기능도 스프링데이터 JPA가 모두 제공
개발자는 핵심 비즈니스 로직 개발에 집중 가능해짐

단 스프링 데이터 JPA 는 JPA를 편리하게 사용할수 있도록 도와주는 도구 이기떄문에 JPA를 먼저 충분히 익힌뒤 사용하는 것을 권장함
JPA를 모르고 사용하면 실제 운영에서 만나는 여러가지 문제를 해결할 수 없음

public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
    @Override
    Optional<Member> findByName(String name);
}

인터페이스만 생성해두면 스프링 데이터 jpa 가 구현체를 만들어서 자바 빈에 등록해줌
JpaRepository 에서 기본적인 CRUD 제공해줌

findBy** 과 같은 식으로 작성하면
select m from Member m where m.**
= ? 로 쿼리 작성해줌

이렇게 인터페이스 이름 만으로 구현가능해짐

복잡한 동적 쿼리는 Querydsl 라이브러리 사용하면 편리하게 작성 가능
이것도 안되면 네이티브 쿼리 사용하거나 JdbcTemplate 사용

profile
iha / ian / inho ha

0개의 댓글