저번 포스팅에 이어서 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를 포스팅 하겠습니다.
'Side Project' 카테고리의 다른 글
[Spring Boot] 환자 관리 프로그램 - Controller & view (4) (0) | 2023.10.20 |
---|---|
[Spring Boot] 환자 관리 프로그램 - Service (3) (0) | 2023.10.19 |
[Spring Boot] 환자 관리 프로그램 - 설정 (1) (0) | 2023.10.18 |
[Spring Boot] chatGPT를 활용한 AI 사이트 (4) - chatGPT API 사용하기 (0) | 2023.10.13 |
[Spring Boot] chatGPT를 활용한 AI 사이트 (3) - chatGPT API 세팅하기 (0) | 2023.10.12 |