[스프링 입문] 스프링 db 접근기술 - JPA

김우경·2021년 1월 11일
0

Spring Framework

목록 보기
7/12

김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 보면서 공부한 내용입니다.

넘 길어져서 두개로 나눴다,,

JPA

반복 코드 제거 + SQL 직접 실행

→ 객체중심의 설계 & 생산성에 큰 향상

환경 설정

라이브러리 추가

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}

JPA 설정 추가

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
  • spring.jpa.show-sql : JPA가 생성하는 sql의 출력

  • spring.jpa.hibernate.ddl-auto : JPA의 모델 자동 생성 기능

    → create 사용시에는 model에 따라 자동으로 테이블 생성해주는 기능

JPA 엔티티 매핑

→ ORM

@Entity

: db의 테이블과 일대일 매핑해준다.
→ 객체의 인스턴스 하나가 테이블 레코드 하나임

@Id

: 테이블상의 PK와 마찬가지로, 엔티티를 유일하게 식별할 수 있는 키

@GeneratedValue(strategy = GenerationType.IDENTITY)

: db에 입력시 db가 자동으로 PK를 생성해서 인서트되므로

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private  Long id;

→ MySQL의 Auto Increament와 같다고 생각하면 될 것 같다.

@Transactional

JPA 사용하면서 데이터를 저장/변경 시에는 항상 트랜잭션이 있어야한다.
→ Service계층에 @Transactional 추가하기

→ 모든 데이터의 변경이 트랜잭션안에서

회원 레포지토리 수정

EntityManager

: 엔티티 관리를 수행하는 클래스

private final EntityManager em;
    
	public JPAMemberRepository(EntityManager em) {
		this.em = em;
}

PK기반의 쿼리

: find() 사용

@Override
    public Optional<Member> findById(Long id) {
        Member member = em.find(Member.class, id);
        return Optional.ofNullable(member);
    }

PK기반의 쿼리가 아닌 경우

: JPQL 사용
→ 엔티티를 대상으로 쿼리를 날리면 sql로 변환됨 -> 객체 자체의 셀렉트

@Override
    public Optional<Member> findByName(String name) {
        List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class)
                .setParameter("name", name)
                .getResultList();
        return result.stream().findAny();
    }

SpringConfing 수정

JPAMemberRepository를 빈에 등록한다.

return new JPAMemberRepository(em);

잘 돌아가는지 통합테스트로 확인!

음 초록불 굿,,

아까 application.properties에서 설정해준대로, 콘솔창에 JPA가 생성한 쿼리문이 찍히는 것도 확인이 가능하다.

JPA와 Hibernate

  • JPA는 자바 진영안의 표준으로 기술명세이다.
    → 라이브러리가 아닌 인터페이스!

    : 자바 어플리케이션에서 RDB스를 어떻게 사용해야 하는지를 정의

  • Hibernate는 이의 구현체이다.

출처

김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 보면서 공부한 내용입니다.

profile
Hongik CE

0개의 댓글