2. Spring Data JPA

Spring Data JPA

다양한 데이터베이스에 종속적인 SQL문 없이도 개발이 가능하기 때문에 개발의 생산성을 높일 수 있다.

장점 :

  • 데이터베이스 관련 코드에 대한 유연함

  • 데이터베이스와 독립적 관계

단점 :

  • 학습곡선이 큼

  • 근본적인 객체지향 설계 사상이 반영되야함

  • 특정 DB의 강력함을 활용할 수 없다. => 데이터베이스의 독립적 개발이 불가능

프로젝트 생성이후 DataSource를 지정해줘야 함

현재 프로젝트가 실행이 안되는 이유는 스프링 부트 내에 JDBC 등의 설정이 포함되어있는데 이에대한 설정이 전혀 없기 때문에 사용자가 지정해주어야 함

  • 방법

    • application.properties를 이용해 필요한 구성 설정

    • @Bean과 같은 어노테이션을 통해 Java 코드로 필요한 객체 구성

application.properties 설정법

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/{DB명}
spring.datasource.username=
spring.datasource.password=

엔티티 클래스 설계

  1. 객체지향 설계대로 클래스들을 설계

  2. @id,@Column 등을 이용해서 각종 제약조건을 추가,설정

  3. 엔티티간 연관관계 설정

@Id 와 @GeneratedValue는 같이?

@Id는 해당 칼럼의 식별키를 의미 함으로써 @GeneratedValue는 식별키를 어떤 전략으로 세울지 명명하는 것이다.

@GeneratedValue 는 Auto, Table, Sequence, Identity 가 있지만 Data 베이스의 종류에 상관없이 자동으로 잡아주는 Auto를 많이 이용한다.

application.properties JPA 설정

#스키마 생성
spring.jpa.hibernate.ddl-auto=
#DDL 생성 시 데이터베이스의 고유기능을 사용하는가?
spring.jpa.generate-ddl=false
#실행되는 SQL문을 보여줄 것인가?
spring.jpa.show-sql=true
#데이터베이스는 무엇을 사용하는가?
spring.jpa.database=mysql
#로그레벨
logging.level.org.hibernate=info
#Mysql 상세지정
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

스키마 생성 옵션

  • create 기존테이블 삭제 후 재 생성

  • create-drop create와 같으나 종료시점에 테이블 drop

  • update 변경된 부분만 반영 * 주로 이거 사용

  • validate 엔티티와 테이블이 정상적으로 매핑되었는지 확인

  • none 사용하지 않음

JPA 처리 담당하는 Repository 인터페이스 설계

일반적으로 사용한 DAO가 JPA에서는 Repository로 보면 될것같다.

Spring Data JPA의 인터페이스 구조는 아래와 같다.

PagingAndSortingRepository<T,ID> -> CrudRepository<T,ID> -> Repository<T,ID>

T= 엔티티 타입 클래스 ID= PK 넘버

Repository 인터페이스는 사실상 아무기능이 없기때문에 주로 사용하는 CRUD 작업을 위주로 하는 CrudRepository 인터페이스나 페이징 처리, 검색 처리 등을 할 수 있는 PagingAndSortingRepository 인터페이스를 이용

조회 테스트시 기존과 바뀐점

  • 조회 테스트 코드는 findById() 메소드를 이용한다. (1.5전까지는 FindOne() 이용)

Hibernate 방언 설정

JPA는 기본적으로 Hibernate라는 JPA 구현체를 사용한다. Hibernate는 내부적으로 지정되는 DB에 맞게 SQL문을 생성하는 DIalect가 존재한다.

spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

좀더 자세한 실행 로그를 보고싶을때?

application.properties 에서

logging.level.org.hibernate=info -> debug 로 변경

Last updated