JAN's History
스프링과 JPA를 이용한 웹개발 프로젝트_엔티티 설계 본문
만들어볼 프로그램은 Seed Starter 입니다.
ERD 다이어그램(간략ver^_^)
Spring Project 생성하기!
https://start.spring.io/ 에서 아래 이미지대로 생성해주시기 바랍니다
Spring Web : Web을 사용할 것이기 때문에 필요
Thymeleaf : 자바 템플릿 엔진으로 타임리프를 사용할 것이기 때문에 필요
Spring Data JPA : JPA를 사용할 것이기 때문에 필요
MySQL Driver : DB를 MySQL로 사용할 것이기 때문에 필요
Lombok : getter, setter같은 스프링에서 자주 사용하는 어노테이션을 제공해주기 때문에 필요
➡️이후 Generater를 눌러 다운받고 압축파일을 풀어 인텔리제이에서 파일 내에 pom.xml을 열어주세요
잠깐! @SpringBootApplication에 대해 잠시 알아볼까요?
이미 알고있다면 넘어가도 좋습니다
@SpringBootApplication
public class SeedstarterApplication {
public static void main(String[] args) {
SpringApplication.run(SeedstarterApplication.class, args);
}
}
pom.xml을 열면 기본세팅이 위와같이 되어있을텐데 @SpringBootApplication이 뭘까요?
SpringBootApplication.class를 열어보면 위와 같아요
여기서 가장 주목해야할 것은 @EnableAutoConfiguration, @ComponentScan 입니다!
@EnableAutoConfiguration:
- @EnableAutoConfiguration 어노테이션은 Spring Boot에서 자동 구성을 활성화하는데 사용됩니다.
- 즉, @EnableAutoConfiguration을 사용하면 자동으로 스프링이 클래스 메소드 위에 @Configuration과 @Bean을 넣어서 Bean으로 자동 등록해줍니다
@ComponentScan:
- @ComponentScan은 해당 패키지와 하위 패키지에서 @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스들을 스캔하여 스프링 애플리케이션 컨텍스트에 빈으로 등록합니다.
➡️ @ComponentScan이 해당 패키지와 하위 패키지까지 등록해주기 때문에, 해당 어노테이션이 붙은 패키지는 상위 패키지에 있어야합니다! 하위에 있는 애들이 자동으로 @ComponentScan의 대상이 되며 빈으로 등록되기 때문입니다
MVC 구조로 패키지 구성하기
repository와 entity를 같은 폴더에 두는 것도 고려해 볼만합니다
엔티티 설계 시작!
SeedStarter Entity
@Getter
@Setter
@Entity
public class SeedStarter {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "SEED_STARTER_ID")
private Long id;
private LocalDateTime datePlanted;
private boolean covered;
@Enumerated(EnumType.STRING)
private Type type;
}
Type(Enum) class
public enum Type {
PLASTIC, WOOD
}
SeedStarter에 Feature 리스트 추가
@Getter
@Setter
@Entity
public class SeedStarter {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "SEED_STARTER_ID")
private Long id;
private LocalDateTime datePlanted;
private boolean covered;
@Enumerated(EnumType.STRING)
private Type type;
@OneToMany(mappedBy = "seedStarter", cascade = CascadeType.PERSIST ,orphanRemoval = true)
//CascadeType.PERSIST : 부모의 상태가 전이되는 것!
//orphanRemoval = true:부모가 사라지면 자식도 함께 사라지는 것 true
private List<Feature> features = new ArrayList<>();
Feature 엔티티
@Getter
@Setter
@Entity
public class Feature {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "FEATURE_ID")
private Long id;
@Enumerated(EnumType.STRING)
private FeatureType name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SEED_STARTER_ID")
private SeedStarter seedStarter = new SeedStarter();
}
FeatureType(enum)
public enum FeatureType {
SUBSTRATE, FERTILIZER, PH_CORRECTOR
}
SeedStarter에 Detail 리스트 추가
@OneToMany(mappedBy = "seedStarter", cascade = CascadeType.PERSIST, orphanRemoval = true)
private List<Detail> details = new ArrayList<>();
Detail 엔티티 설계
@Getter
@Setter
@Entity
public class Detail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "DETAIL_ID")
private Long id;
private int rowNum;
private int seedPerCell; //하나의 seed에 몇개에 cell이 있는지
private String variety; //품종
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SEED_STARTER_ID")
private SeedStarter seedStarter;
}
'스프링' 카테고리의 다른 글
스프링과 JPA를 이용한 웹개발 프로젝트_Repository구현 (0) | 2024.04.08 |
---|---|
스프링과 JPA를 이용한 웹개발 프로젝트_데이터 연동(MySQL), 컨트롤러 (0) | 2024.04.07 |
스프링과 JPA를 이용한 웹개발_Spring Data JPA 2 (0) | 2024.04.06 |
jsp, tomcat 간단하게 그림으로 이해하기! (0) | 2024.04.05 |
스프링과 JPA를 이용한 웹개발_Spring Data JPA 1 (0) | 2024.04.04 |