2. Spring Data JPA
다양한 데이터베이스에 종속적인 SQL문 없이도 개발이 가능하기 때문에 개발의 생산성을 높일 수 있다.
장점 :
- 데이터베이스 관련 코드에 대한 유연함
- 데이터베이스와 독립적 관계
단점 :
- 학습곡선이 큼
- 근본적인 객체지향 설계 사상이 반영되야함
- 특정 DB의 강력함을 활용할 수 없다. => 데이터베이스의 독립적 개발이 불가능
현재 프로젝트가 실행이 안되는 이유는 스프링 부트 내에 JDBC 등의 설정이 포함되어있는데 이에대한 설정이 전혀 없기 때문에 사용자가 지정해주어야 함
- 방법
- application.properties를 이용해 필요한 구성 설정
- @Bean과 같은 어노테이션을 통해 Java 코드로 필요한 객체 구성
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는 식별키를 어떤 전략으로 세울지 명명하는 것이다.
@GeneratedValue 는 Auto, Table, Sequence, Identity 가 있지만 Data 베이스의 종류에 상관없이 자동으로 잡아주는 Auto를 많이 이용한다.
#스키마 생성
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 사용하지 않음
일반적으로 사용한 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() 이용)
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 modified 3yr ago