입사 후 공부하며 기술 스텍을 쌓던 내게 던져진 첫 실무 과제.
stack : Springboot 2.3.6 RELEASE, gradle, JPA, mysql ...
Entity 구현
Repository 인터페이스 구현
DTO 구현
Service 구현
Service 메소드별 테스트 구현
Controller 구현
DB에 구현할 Category entity를 구현해보즈앗 ! 😁
@Getter
@Setter
@NoArgsConstructor
@Entity
public class Category {
@Id @GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
@Column (nullable = false)
private String branch;
private String code;
private String name;
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name ="parent_cagegory_id")
private Category parentCategory;
@OneToMany (mappedBy = "parentCategory", cascade = CascadeType.ALL)
private List<Category> subCategory = new ArrayList<>();
private Integer level;
@Builder
public Category(String branch, String code, String name, Integer level,Category parentCategory) {
this.branch = branch;
this.code = code;
this.name = name;
this.level = level;
this.parentCategory = parentCategory;
}
}
JPA를 사용한 Self join 생각해보면 간단하다.
JPA연관관계에서 'xToOne' (ManyToOne, OneToOne)은 fetchType.EAGER가 default다.
지연 참조를 사용해줘야 n+1등 jpa 사용에 지장이 없다.
습관적으로 fetch에 모두 LAZY를 발라주자 !! 😆
public interface CategoryRepository extends JpaRepository<Category, Long> {
Optional<Category> findByName (String name);
Optional<Category> findByBranchAndName (String branch, String name);
Boolean existsByBranchAndName(String branch, String name);
}
boolean 타입으로 return 받는다.
DB를 탐색하여 있는지 없는지 요녀석을 통해 반환 받아서 로직을 짤 예정이다.
이렇게 쓰는 법은 팀장님이 꿀팁으로 알려주심 팀장님 짱
다음 편에서는 DTO구현과 Service (save메소드) 구현을 포스팅하겠슴다 😊
딱 하고있던 건데! 감사해요 'ㅂ'