티스토리 뷰
JPA의 장점
- 객체에 적절한 책임을 할당하는 객체지향적 개발이 가능하다.
- 새로운 필드가 추가될 때마다 쿼리를 수정해야 하는 문제가 발생하지 않는다.
생성 방식
- create: 기존 테이블 삭제 후 다시 생성 (개발)
- create-drop: create와 같으나 종료 시점에 테이블 drop (개발)
- update: 변경된 부분만 반영 (테스트, 개발)
- validate: entity와 table이 정상 매핑되었는지만 확인 (테스트, 운영)
- none: 사용하지 않음 (스테이징, 운영)
데이터베이스 스키마 생성 방식 설정
// application.properties
spring.jpa.hibernate.ddl-auto={생성_방식}
스키마 자동 생성을 위한 Entity class 작성법
@Entity // (1)
@Table(name = "station") // (2)
public class Station {
@Id // (3)
@GeneratedValue(strategy = GenerationType.IDENTITY) // (4)
private Long id;
@Column(name = "name", nullable = false) // (5)
private String name;
protected Station() { // (6)
}
}
- @Entity : entity 클래스임을 지정
- @Table : 아무 설정을 하지 않으면 entity 이름과 같은 테이블이 기본으로 생성되며, 생성하기 원하는 테이블 이름을 지정할 수 있다. (생략 가능)
- @Id : Primary key 지정
- @GeneratedValue : PK 생성 규칙
- @Column : 테이블의 컬럼 이름을 지정하거나 속성을 지정할 수 있다. (생략 가능)
- 매개변수가 없는 생성자 : 매개변수가 없는 생성자를 반드시 선언해야 한다.
콘솔에서 JPA가 자동 생성하는 쿼리 보는 방법
spring.jpa.show-sql=true // SQL 보기
spring.jpa.properties.hibernate.format_sql=true // indent된 SQL 표시
Repository 선언 방법
interface StationRepository extends JpaRepository<Station, Long> { // (1)
Station findByName(String name); // (2)
}
- interface에 JpaRepository<entitiy 이름, PK 데이터 타입>을 상속
- 메소드 이름으로 쿼리를 생성
- findBy + 컬럼이름 (= SELECT * FROM station WHERE 컬럼이름 = ?)
- find 이외의 키워드
'Framework > Spring Data JPA' 카테고리의 다른 글
JDBC batch 크기 제한 문제 해결 (0) | 2024.12.29 |
---|---|
우아한테크캠프 Pro 5기 - 도메인 이벤트 (0) | 2022.12.30 |
[JPA/Hibernate] 프록시와 연관관계 관리 (0) | 2021.06.29 |
[JPA/Hibernate] 고급 매핑 (0) | 2021.06.28 |
[JPA/Hibernate] 연관관계 매핑 기초 (0) | 2021.05.25 |
댓글