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-drop create와 같으나 종료시점에 테이블 drop
update 변경된 부분만 반영 * 주로 이거 사용
validate 엔티티와 테이블이 정상적으로 매핑되었는지 확인
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 로 변경