2. Spring Data JPA
Spring Data JPA
다양한 데이터베이스에 종속적인 SQL문 없이도 개발이 가능하기 때문에 개발의 생산성을 높일 수 있다.
장점 :
데이터베이스 관련 코드에 대한 유연함
데이터베이스와 독립적 관계
단점 :
학습곡선이 큼
근본적인 객체지향 설계 사상이 반영되야함
특정 DB의 강력함을 활용할 수 없다. => 데이터베이스의 독립적 개발이 불가능
프로젝트 생성이후 DataSource를 지정해줘야 함
현재 프로젝트가 실행이 안되는 이유는 스프링 부트 내에 JDBC 등의 설정이 포함되어있는데 이에대한 설정이 전혀 없기 때문에 사용자가 지정해주어야 함
방법
application.properties를 이용해 필요한 구성 설정
@Bean과 같은 어노테이션을 통해 Java 코드로 필요한 객체 구성
application.properties 설정법
엔티티 클래스 설계
객체지향 설계대로 클래스들을 설계
@id,@Column 등을 이용해서 각종 제약조건을 추가,설정
엔티티간 연관관계 설정
@Id 와 @GeneratedValue는 같이?
@Id는 해당 칼럼의 식별키를 의미 함으로써 @GeneratedValue는 식별키를 어떤 전략으로 세울지 명명하는 것이다.
@GeneratedValue 는 Auto, Table, Sequence, Identity 가 있지만 Data 베이스의 종류에 상관없이 자동으로 잡아주는 Auto를 많이 이용한다.
application.properties JPA 설정
스키마 생성 옵션
create 기존테이블 삭제 후 재 생성
create-drop create와 같으나 종료시점에 테이블 drop
update 변경된 부분만 반영 * 주로 이거 사용
validate 엔티티와 테이블이 정상적으로 매핑되었는지 확인
none 사용하지 않음
JPA 처리 담당하는 Repository 인터페이스 설계
일반적으로 사용한 DAO가 JPA에서는 Repository로 보면 될것같다.
Spring Data JPA의 인터페이스 구조는 아래와 같다.
T= 엔티티 타입 클래스 ID= PK 넘버
Repository 인터페이스는 사실상 아무기능이 없기때문에 주로 사용하는 CRUD 작업을 위주로 하는 CrudRepository 인터페이스나 페이징 처리, 검색 처리 등을 할 수 있는 PagingAndSortingRepository 인터페이스를 이용
조회 테스트시 기존과 바뀐점
조회 테스트 코드는 findById() 메소드를 이용한다. (1.5전까지는 FindOne() 이용)
Hibernate 방언 설정
JPA는 기본적으로 Hibernate라는 JPA 구현체를 사용한다. Hibernate는 내부적으로 지정되는 DB에 맞게 SQL문을 생성하는 DIalect가 존재한다.
좀더 자세한 실행 로그를 보고싶을때?
application.properties 에서
logging.level.org.hibernate=info -> debug 로 변경
Last updated