Spring

[스타트 스프링 부트] 1-2. Spring Data JPA 맛보기

nineDeveloper 2019. 10. 6. 16:26
728x90

스타트 스프링 부트

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringbook/start-spring-boot-study/tree/chap01-02-spring_data_jpa_start

해당 포스팅 참고 서적 URL

https://book.naver.com/bookdb/book_detail.nhn?bid=12247655

SpringBoot Version

책이 출간된지 좀 지나고 공부를 해서 가장 최신의 버전으로 실습을 진행함

  • Book Version: 2.0.0
  • 실습 Version: 2.1.2.RELEASE

1. Spring Boot Spring Data JPA 사용해보기

2. Spring Data JPA 맛보기

JPA Annotation

http://www.datanucleus.org/products/datanucleus/jpa/annotations.html

@id

각 엔티티를 구별할 수 있도록 식별 ID를 가지게 함

@Column

데이터베이스의 테이블을 구성할 때 인스턴스 변수가 칼럼이 되기 때문에 원한다면 칼럼명을
별도로 지정하거나 칼럼의 사이즈, 제약 조건들을 추가하기 위해서 사용

Attribute Type Description Default
name String 칼럼 이름
unique boolean 유니크 여부 true, false
nullable boolean null 허용 여부 true, false
insertable boolean insert 가능 여부 true, false
updateable boolean 수정 가능 여부 true, false
table String 테이블 이름
length int 칼럼 사이즈 255
precision int 소수 정밀도 0
scale int 소수점 이하 자리수 0

@Table

클래스가 테이블이 되기 때문에 클래스의 선언부에 작성하여 테이블명을 어떻게 지정할지 결정
만일 @Table이 지정되지 않으면 클래스 이름과 동일한 이름의 테이블이 생성됨

Attribute Type Description Default
name String 테이블 이름
catalog String 테이블 카테고리
schema String 테이블 스키마
uniqueConstraints UniqueConstraint[ ] 칼럼값 유니크 제약 조건
indexes index[ ] 인덱스 생성

@Entity

해당 클래스의 인스턴스들이 엔티티임을 명시

@GeneratedValue

strategy
AUTO

특정 데이터베이스에 맞게 자동으로 생성되는 방식

IDENTITY

기본키 생성 방식 자체를 데이터베이스에 위임하는 방식
데이터베이스에 의존적인 방식, MySQL에서 주로 많이 사용

SEQUENCE

데이터베이스의 시퀀스를 이용해서 식별키 생성(오라클에서 사용)

TABLE

별도의 키를 생성해주는 채번 테이블(번호를 취할 목적으로 만든 테이블)을 이용하는 방식

generator

@CreationTimestamp

게시물 작성시간

@UpdateTimestamp

최종 수정 시간

application.properties 옵션

# 스키마 생성(create)
spring.jpa.hibernate.ddl-auto=create
# 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

DDL 옵션

spring.jpa.hibernate.ddl-auto 옵션

  • create: 기존 테이블 삭제 후 다시 생성
  • create-drop: create와 같으나 종료 시점에 테이블 DROP
  • update: 변경된 부분만 반영
  • validate: 엔티티와 테이블이 정상적으로 매핑되었는지만 확인
  • none: 사용하지 않음

CrudRepository 제공 메서드

메소드 설명
log count() 모든 엔티티의 개수
void delete(ID ) 식별키를 통한 삭제
void delete(Iterable<? extends T>) 주어진 모든 엔티티 삭제
void deleteAll( ) 모든 엔티티 삭제
boolean exists(ID) 식별키를 가진 엔티티가 존재하는지 확인
Iterable<T> findAll( ) 모든 엔티티 목록
Iterable<T> findAll(Iterable<ID>) 해당 식별키를 가진 엔티티 목록 반환
T findOne(ID) 해당 식별키에 해당하는 단일 엔티티 반환
<S extends T>Iterable<S> save(Iterable<S>) 해당 엔티티들의 등록과 수정
<S extends T>S save(S entity) 해당 엔티티의 등록과 수정

Hibernate가 지원하는 Dialect

http://docs.jboss.org/hibernate/orm/current/javadocs/org/hibernate/dialect/package-summary.html

728x90