장점
단점
build.gradle 파일의 dependencies 부분에 추가하기!
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:8081/together?serverTimezone=Asia/Seoul
username: root
password:
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
open-in-view: false
show-sql: true
hibernate:
format_sql: true
ddl-auto: create
logging:
level:
org:
hibernate:
SQL: DEBUG
type:
descriptor:
sql:
BasicBinder: TRACE
spring data jpa는 JpaRepository라는 공통 인터페이스 제공
JpaRepository<T,ID>를 상속하는 인터페이스를 구성
주요 메소드
|주요 메소드|설명|
|:----:|:--------------:|
|save(S entity)|새로운 엔티티는 저장하고 이미 있는 엔티티는 병합|
|void delelte(T entity)|엔티티 하나를 삭제한다. EntityManager.remove() 호출|
|Optional findById(Id id)|엔티티 하나를 조회한다. EntityManager.find() 호출|
|T getOne(Id id)|엔티티 프록시로 조회한다. EntityManager.getReference() 호출|
|List findAll(...)|모든 엔티티를 조회. 정렬(Sort)나 페이징(Pageable)조건을 파라미터로 제공 가능|
쿼리 생성
메서드 이름에 관한 규칙(By 필드명)
|쿼리 종류|이름규칙|
|:-----:|:--------------:|
|조회|find…By, read…By, get…By, query…By, search…By, stream…By|
|EXISTS|조회, boolean 반환|
|COUNT|count 조회, long 반환|
|삭제|delete...By, remove...By, long 반환|
|DISTICT|findDistinct, findMemberDistinctBy|
|LIMIT|findFirst3, findFirst, findTop, findTop3|
-> 엔티티의 필드명이 변경되면 인터페이스에 정의한 메서드 이름도 꼭 함께 변경해야 함. 그렇지 않으면 애플리케이션을 시작하는 시점에 오류 발생
@Entity : 이 클래스에 테이블과 매핑한다고 JPA에게 알려줌
@Table : 엔티티 클래스에 매핑할 테이블 정보를 알려줌 이 어노테이션을 생략하면 클래스 이름을 테이블 이름으로 매핑
@Id : 엔티티 클래스의 필드를 테이블의 기본 키에 매핑(이 어노테이션이 쓰인 필드를 식별자 필드라 부름)
@Column : 필드를 칼럼에 매핑