설정
Spring Data JPA가 개발에 필요한 것
- JPA를 통해서 관리하게 되는 객체(엔티티객체)를 위한 엔티티 클래스.
- 엔티티 객체들을 처리하는 기능을 가진 Repository.
1. 엔티티 클래스 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package org.zerock.ex2.entity;
import jakarta.persistence.*;
import lombok.*;
@Entity
@Table(name= "tbl_memo")
@ToString
@Getter
@Setter
@Builder // 객체 생성할 수 있게 처리
// @Builder를 이용하면서 컴파일 에러 발생하지 않게 처리
@AllArgsConstructor
@NoArgsConstructor
public class Memo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long mno;
@Column(length = 200, nullable = false)
private String memoText;
}
@Entity
- 해당 클래스가 엔티티를 위한 클래스이며, 해당 클래스의 인스턴스들이 JPA로 관리되는 엔티티 객체라는 것을 의미함.
- 옵션에 따라 자동으로 테이블 생성 가능
=>@Entity
가 있는 클래스의 멤버 변수에 따라서 자동으로 컬럼들도 생성됨.
@Table
- 데이터베이스상에서 엔티티 클래스를 어떠한 테이블로 생성할 것인지에 대한 정보를 담기 위한 어노테이션.
@Id
, @GeneratedValue
@Id
: Primary Key에 해당하는 특정 필드를@Id
로 지정.@GeneratedValue
: 자동으로 생성되는 번호를 사용하기 위해서 사용.strategy = GenerationType.IDENTITY
: 키 생성 전략- AUTO(default) : JPA 구현체(스프링 부트에서는 Hibernate)가 생성 방식을 결정.
- IDENTITY : 사용하는 데이터베이스가 키 생성을 결정.
@Column
- 추가적인 필트(컬럼)이 필요한 경우에 활용.
- nullable, name, length 등 다양한 속성 지정 가능.
2. Spring Data JPA를 위한 스프링 부트 설정
1
2
3
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto
- 프로젝트 실행 시에 자동으로 DDL(create, alter, drop 등)을 생성할 것인지를 결정하는 설정.
- update로 설정했으므로 변경이 필요한 경우에는 alter로 변경되고, 테이블이 없는 경우에는 create 됨.
spring.jpa.properties.hibernate.format_sql
- Hibernate가 동작하면서 발생하는 SQL을 포맷팅해서 출력.
- 실행되는 SQL의 가독성을 높여줌.
spring.jpa.show-sql
- JPA 처리 시에 발생하는 SQL을 보여줄 것인지를 결정.
3. JpaRepository 인터페이스
- Spring Data JPA에는 여러 종류의 인터페이스 기능을 통해 JPA관련 작업을 별도의 코드 없이 처리할 수 있게 지원함.
- ex) CRUD 작업이나 페이징, 정렬 등의 처리도 인터페이스의 메서드를 호출하는 형태로 처리함.
- JpaRepositroy 상속 구조
4. JPARepository 사용하기
- JPARepository 인터페이스를 상속하는 MemoRepository 선언.
=> Spring Data JPA는 인터페이스 선언만으로도 자동으로 스프링의 빈으로 등록됨. (스프링이 내부적으로 인터페이스 타입에 맞는 객체들을 생성해서 빈으로 등록)
1
2
3
4
5
6
7
package org.zerock.ex2.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.zerock.ex2.entity.Memo;
public interface MemoRepository extends JpaRepository<Memo, Long> {
}