본문 바로가기
개발/Spring

Spring Data JPA 인터페이스

by BellOne4222 2024. 2. 27.

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