개인프로젝트/기능프로그램_오늘뭐입지

20240506_JPA 설정(entity, Repository, Service, Controller, properties)

일일일코_장민기 2024. 5. 6. 04:49
728x90

JPARepository
- Spring Data JPA에서 제공하는 인터페이스 중 하나

- JPA를 사용하여 데이터베이스를 조작하기 위한 메서드들을 제공
- JPARepository 인터페이스를 상속받는 인터페이스를 정의하면, 해당 인터페이스를 구현하는 클래스는 JPA에서 제공하는 메서드들을 사용할 수 있음

- 데이터베이스의 추가, 조회, 수정, 삭제의 findAll(), findById(), save() 등의 메서드들이 기본 제공

- JPARepository 인터페이스는 제네릭 타입을 사용하여 Entity클래스와 복합키를 사용하고 있다면 해당 Entity의 ID클래스를 명시함

--> 이를 통해 해당 인터페이스를 상속받는 구현체는 Entity클래스와 ID클래스에 대한 정보를 알고 있어서, 런타임 시점에 적절한 쿼리를 생성하고 실행할 수 있음

 

기본 제공

findById(ID id): ID에 해당하는 엔터티를 찾아 반환(PK)
findAll(): 모든 엔터티를 조회하여 리스트로 반환
save(S entity): 엔터티를 저장하거나 업데이트
deleteById(ID id): ID에 해당하는 엔터티를 삭제
existsById(ID id): ID에 해당하는 엔터티가 존재하는지 여부를 확인
count(): 저장된 엔터티의 총 개수를 반환

 

인텔리제이에서 DB를 연결했을 경우, 자동으로 JPA 엔티티를 만들 수 있다.

 

package com.wiw.whatShouldIWearToday;

import jakarta.persistence.*;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.Instant;

@Getter
@Setter
@Entity                         //JPA가 관리하는 클래스
@Table(name = "membervo")       //테이블과 매핑할 테이블은 해당 어노테이션을 붙임
public class MemberVO {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ColumnDefault("nextval('users_userid_seq'")
    @Column(name = "userid", nullable = false)
    private Integer id;

    @Size(max = 50)
    @NotNull
    @Column(name = "username", nullable = false, length = 50)
    private String username;

    @Size(max = 100)
    @NotNull
    @Column(name = "password", nullable = false, length = 100)
    private String password;

    @Size(max = 100)
    @NotNull
    @Column(name = "email", nullable = false, length = 100)
    @Email
    private String email;

    @ColumnDefault("CURRENT_TIMESTAMP")
    @Column(name = "registerdate")
    @DateTimeFormat
    private Instant registerdate;

}

- 기본적으로 다 맞춰주지만 필요한 어노테이션은 추가로 설정