Spring Data JPA 인터페이스
- Repository
- 기본 repository 인터페이스, 어떤 메소드도 제공하지 않는다.
- CrudRepository
- Repository + CRUD 기능 제공
- PagingAndSortingRepository
- CrudRepository + 페이징, 정렬 기능 제공
- JpaRepository
- PagingAndSortingRepository + Spring Data JPA repository 전체 기능
- @Param
- 쿼리 메소드 입력 파라미터에 사용하여 애노테이션 기반 파라미터 바인딩 할 때 사용
- @Query
- 직접 JPQL을 작성하고 싶을 때 사용
- @NoRepositoryBean
- 빈으로 등록하고 싶지 않은 인터페이스를 지정할 수 있다.
- 특정 쿼리 메소드를 기본 메소드로 지정하는 방식으로 운영 가능
- 특정 메소드를 선택저그올 사용하거나 api에 노출하고자 할 때도 사용하는 테크닉
@Entity
- 데이터베이스에 저장(persist)할 자바 객체를 정의
- 테이블 스키마 정보 표현
- 애노테이션으로 표현한 스키마 정보와 실제 테이블 스키마가 완벽히 일치해야 할 필요는 없다.
- 하나의 도메인으로 간주
- 주요 JPA 애노테이션
- @Table, @Index, @UniqueConstraint : 테이블 기본 정보와 인덱스, unique 키를 설정
- @Id, @GeneratedValue : primarykey 설정
- @Column : 각 컬럼 설정
- @Enumerated : enum을 처리하는 방법을 설정
- @Transient : 특정 필드를 DB 영속 대상에서 제외
- @OneToOne, @OneToManym, @ManyToOne, @ManyToMany : 연관관계 설정
- @MappedSuperClass : 상속을 이용한 공통 필드 정의
- @Embedded, @Embeddable : 클래스 멤버를 이용한 공통 필드 정의
- @DateTimeFormat : 스프링에서 제공하는 애노테이션, 날짜 입력의 포맷을 지정
- JPA Entity에 일정하게 작성하는 메타데이터를 처리하는 애노테이션
• @PrePersist
• @PostPersist
• @PreRemove
• @PostRemove
• @PreUpdate
• @PostUpdate
• @PostLoad
- 엔티티의 생성일시, 수정일시, 생성자, 수정자를 자동으로 관리해주는 애노테이션
• 설정
• @EnableJpaAuditing
• @EntityListeners(AuditingEntityListener.class)
• 활용
• @CreatedBy
• @CreatedDate
• @LastModifiedBy
• @ LastModifiedDate
- domain/event
@Getter // Lombok을 사용하여 getter 메서드를 자동 생성
@ToString // Lombok을 사용하여 toString 메서드를 자동 생성
@Table(indexes = {
@Index(columnList = "eventName"), // eventName 열에 대한 인덱스 생성
@Index(columnList = "eventStartDatetime"), // eventStartDatetime 열에 대한 인덱스 생성
@Index(columnList = "eventEndDatetime"), // eventEndDatetime 열에 대한 인덱스 생성
@Index(columnList = "createdAt"), // createdAt 열에 대한 인덱스 생성
@Index(columnList = "modifiedAt") // modifiedAt 열에 대한 인덱스 생성
})
@EntityListeners(AuditingEntityListener.class) // 엔티티 리스너로 AuditingEntityListener를 설정
@Entity // JPA에게 이 클래스가 데이터베이스 테이블과 매핑되는 엔티티임을 알림
public class Event {
@Id // 주키 필드를 나타내는 어노테이션
@GeneratedValue(strategy = GenerationType.IDENTITY) // 주키의 값을 자동으로 생성하기 위한 전략 설정
private Long id; // 이벤트의 고유 식별자
@Setter // Lombok을 사용하여 setter 메서드를 자동 생성
@ManyToOne(optional = false) // 다대일(N:1) 관계를 나타내는 어노테이션, nullable = false로 설정하여 null이 허용되지 않음
private Place place; // 이벤트가 열리는 장소
@Setter // Lombok을 사용하여 setter 메서드를 자동 생성
@Column(nullable = false) // 컬럼을 나타내는 어노테이션, nullable = false로 설정하여 null이 허용되지 않음
private String eventName; // 이벤트 이름
@Setter // Lombok을 사용하여 setter 메서드를 자동 생성
@Column(nullable = false, columnDefinition = "varchar(20) default 'OPENED'") // 컬럼을 나타내는 어노테이션 및 컬럼 정의
@Enumerated(EnumType.STRING) // Enum 타입을 문자열로 변환하여 저장
private EventStatus eventStatus; // 이벤트 상태
@Setter // Lombok을 사용하여 setter 메서드를 자동 생성
@Column(nullable = false, columnDefinition = "datetime") // 컬럼을 나타내는 어노테이션 및 컬럼 정의
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) // 날짜 및 시간 형식을 지정하기 위한 어노테이션
private LocalDateTime eventStartDatetime; // 이벤트 시작 일시
@Setter // Lombok을 사용하여 setter 메서드를 자동 생성
@Column(nullable = false, columnDefinition = "datetime") // 컬럼을 나타내는 어노테이션 및 컬럼 정의
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) // 날짜 및 시간 형식을 지정하기 위한 어노테이션
private LocalDateTime eventEndDatetime; // 이벤트 종료 일시
@Setter // Lombok을 사용하여 setter 메서드를 자동 생성
@Column(nullable = false, columnDefinition = "integer default 0") // 컬럼을 나타내는 어노테이션 및 컬럼 정의
private Integer currentNumberOfPeople; // 현재 참여자 수
@Setter // Lombok을 사용하여 setter 메서드를 자동 생성
@Column(nullable = false) // 컬럼을 나타내는 어노테이션, nullable = false로 설정하여 null이 허용되지 않음
private Integer capacity; // 수용 가능한 참여자 수
@Setter // Lombok을 사용하여 setter 메서드를 자동 생성
private String memo; // 메모
@Column(nullable = false, insertable = false, updatable = false,
columnDefinition = "datetime default CURRENT_TIMESTAMP") // 컬럼을 나타내는 어노테이션 및 컬럼 정의
@CreatedDate // 엔티티가 생성될 때 자동으로 생성 일자를 설정하기 위한 어노테이션
private LocalDateTime createdAt; // 생성 일시
@Column(nullable = false, insertable = false, updatable = false,
columnDefinition = "datetime default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP") // 컬럼을 나타내는 어노테이션 및 컬럼 정의
@LastModifiedDate // 엔티티가 업데이트될 때 자동으로 수정 일자를 설정하기 위한 어노테이션
private LocalDateTime modifiedAt; // 수정 일시
'개발 > Spring' 카테고리의 다른 글
JPA 테스트 (1) | 2024.02.27 |
---|---|
DataSource, TransactionManager (1) | 2024.02.27 |
H2 Database (0) | 2024.02.26 |
Hibernate, Spring Data JPA (0) | 2024.02.26 |
MyBatis, JdbcTemplate (0) | 2024.02.26 |