JPA와 스프링 데이터 JPA
JPA 는 반복적인 코드 줄여줌, sql 직접 작성하지 않아도 됨
sql과 데이터 중심의 설계에서 객체 중심의 설계로 가능
JPA 도 스프링 만큼 기술적인 깊이가 있는 기술
JPA 는 자바 표준 인터페이스, 구현은 여러 업체들이 하는 것
각 업체마다 성능이 좋거나 사용하기 좋거나 특징이 있을수 있음
환경 설정
- dependencies 에 jpa 추가하고 gradle reset
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
- 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 사용
Author And Source
이 문제에 관하여(JPA와 스프링 데이터 JPA), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@i-no/JPA저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)