본문 바로가기
Side Project

[Spring Boot] 환자 관리 프로그램 - Entity, Repository (2)

by jisayDeveloper 2023. 10. 19.
728x90
반응형
SMALL

저번 포스팅에 이어서 Entity와 Repository를 만들어 보겠습니다.

https://jisaydeveloper.tistory.com/31

 

[Spring Boot] 환자 관리 프로그램 - 설정 (1)

게시판 연습할겸 환자 관리 프로그램을 만들어 보겠습니다. dependencies는 위의 네개를 추가합니다. application.properties spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://localh

jisaydeveloper.tistory.com

BaseEntity

package com.chart.misay.entity;

import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Data
abstract class BaseEntity {

    @CreatedDate
    private String regDate;

    @PrePersist
    public void onPrePersist() {
        this.regDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
}

BaseEntity는 추상클래스로 정의하여 다른 Entity에 상속합니다.

@MappedSuperclass는 BaseEntity를 테이블로 매핑하진 않지만 상속하는 하위 클래스들이 공통 속성을 허용합니다.

@EntityListeners(AuditingEntityListener.class)는 BaseEntity 클래스의 @Prepersist 메서드에서 엔티티가 영구 저장되기 전에 LocalDateTime을 이용해 작성 시간을 넣어줍니다.

 

Member

package com.chart.misay.entity;

import lombok.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mno;
    private String name;
    private String age;
}

환자를 등록하여 관리하는 엔티티입니다. 간단하게 이름과 나이만 입력받을 겁니다.

@Id는 primary key를 나타냅니다.

@GeneratedValue(strategy = GenerationType.IDENTITY) 는 자동 생성된 키를 관리하기 위해 사용하는데 

strategy 는 어떤 방법으로 자동 생성된 키를 관리할 것인지를 나타내며 Generation.IDENTITY는 데이터베이스가 자동으로

키를 생성하도록 지시합니다.

 

Misay

package com.chart.misay.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class Misay extends BaseEntity{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long bno;

    private String surgeryName;//수술명

    private String surgeryDate;//수술날짜

    private String surgeryArea;//수술부위

    private String rehab;//재활

    private String rehabDate;//재활날짜

    private String memo;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name ="memberId")
    private Member member;


}

주석에도 알 수 있듯 환자 차트입니다. 

@ManyToOne(fetch = FetchType.LAZY) 는 다대일 관계를 나타내며 fetch 속성은 데이터를 가져올때 지연 로딩 방식(LAZY)을 사용합니다.

@JoinColumn(name = memberId) 는 외부 키관계를 설정합니다. memberId는 엔티티간의 연결되는 열의 이름입니다.

 

MemberRepository

package com.chart.misay.repository;

import com.chart.misay.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface MemberRepository extends JpaRepository<Member, Long> {
    List<Member> findByNameContaining(String keyword);

}

findByNameContaining(String keyword); 은 쿼리 메서드로서 name필드에 특정 키워드를 포함하는 모든 회원을 찾아서 List로 반환합니다.

 

MisayRepository

package com.chart.misay.repository;

import com.chart.misay.entity.Misay;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import java.util.List;


public interface MisayRepository extends JpaRepository<Misay, Long> {

    List<Misay> findBySurgeryArea(String value);
    List<Misay> findByMemberNameContaining(String keyword);
    List<Misay> findBySurgeryAreaContaining(String keyword);

}

 findBySurgeryArea(String value);
 findByMemberNameContaining(String keyword);
 findBySurgeryAreaContaining(String keyword);

 

이 쿼리 메서드들도 MemberRepositrory에서 설명했듯이 각각의 필드에 맞게 keyword와 value에 맞는 Misay엔티티를 List로 반환합니다.

 

다음 편에서 Service를 포스팅 하겠습니다.

728x90
반응형
LIST