JPA 는 반복적인 코드 줄여줌, sql 직접 작성하지 않아도 됨
sql과 데이터 중심의 설계에서 객체 중심의 설계로 가능
JPA 도 스프링 만큼 기술적인 깊이가 있는 기술
JPA 는 자바 표준 인터페이스, 구현은 여러 업체들이 하는 것
각 업체마다 성능이 좋거나 사용하기 좋거나 특징이 있을수 있음
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
@Entity : entity 설정
@Id : pk 설정
@GeneratedValue(strategy = GenerationType.IDENTITY) : db가 값을 자동으로 생성하도록 전략 설정
pk 기반 select 나 save, update 는 쿼리가 필요 없지만
findByName 이나 리스트를 반환하는 findAll은 createQuery로 쿼리 작성이 필요함
데이터를 저장하거나 변경할때는 @Transactional 안에서 실행되어야함
spring.datasource.username=sa
스프링 부트 2.4부터 application.properites 에 위 옵션이 없으면 에러가 발생함
스프링 데이터 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 사용