
๊ทธ๋ฃน์คํฐ๋๋ก ์งํํ๊ณ ์๋ CRUD๊ฒ์ํ ํ๋ก์ ํธ์ผ !
์ด๋ฒ ์๊ฐ์๋ ๋ฆฌ๋ทฐ(๋๊ธ)๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ๋ก ํ์๋ค.
๋จผ์ ์๋ก ์ถ๊ฐํ ํ์ผ๋ค์ ์๊ฐํ๋ ค๊ณ ํ๋ค!.
review.java
package com.example.demo.domain;
import lombok.*;
import javax.persistence.*;
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@Getter
@Entity
@Table(name = "review")
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "health_id")
private HealthInfo healthInfo;
private String content;
public void updateReview(String content){
this.content=content;
}
}
ํ
์ด๋ธ๊ณผ ๋งํฌ๋ ํด๋์ค์์ ๋ํ๋ด๋ Domainํจํค์ง์ Reviewํ์ผ์ ์ถ๊ฐํ์๋ค.
Attribute(์์ฑ)๋ ์ด 3๊ฐ์ด๋ค.
- id (๊ธฐ๋ณธํค)
- content
- healthInfo(์ธ๋ํค - healthinfo)
ํ ์ด๋ธ ์ด๋ฆ์ review๋ก ์ค์ ํ์๊ณ ๊ทธ ๋ฐ์ ์ด๋ ธํ ์ด์ ๋ค์ ์ถ๊ฐํ์๋ค
๊ฒ์ํ๊ณผ ๋ฌ๋ผ์ง ์ ์ HealthInfo๊ฐ์ฒด์ธ healthInfo์ด๋ค.
๊ฒ์ํ ๊ธ 1๊ฐ์, ์ฌ๋ฌ๊ฐ์ ๋๊ธ์ด ๋ฌ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ review์์๋ healthInfo์ @ManyToOne์ ์ถ๊ฐํ์๋ค. joinColumn์ ๋ํ ์ค๋ช
์ ์ฌ๊ธฐ์์ ๋ณด๋ค ์์ธํ ์ ์ ์์ผ๋ ๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค !
HealthInfo.java
package com.example.demo.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Entity
@Table(name = "health_info")
@ToString
@Data
public class HealthInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String brand_name;
private String land_number;
private String road_number;
private String category;
@Builder.Default
@OneToMany(cascade = CascadeType.ALL, mappedBy = "healthInfo")
private List<Review> reviews = new ArrayList<>();
//๋๊ธ์ด ์๋ ๊ฒฝ์ฐ์ null์๋ฌ ์์ธ๋ฅผ ๋ฐฉ์งํ๊ณ ์ ์ด๋ ๊ฒ ์ ์ธํ๋ค.
public void modifyHealthinfo(String brand_name,String land_number,String road_number, String category){
this.brand_name=brand_name;
this.land_number=land_number;
this.road_number=road_number;
this.category=category;
}
}
๊ด๊ณ๋ฅผ ์๋ฐฉํฅ์ผ๋ก ์ค์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ healthInfoํ์ผ์๋ @OnetoMany ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ์๋ค.
Arraylist๋ฐฉ์์ผ๋ก Review๊ฐ์ฒด๋ฅผ ์ ์ํ์๋ค.
healthinfo์ ๋ง์ฐฌ๊ฐ์ง๋ก review๋ค๋ response, request dtoํ์ผ์ ๋ง๋ค์๋ค.
ReviewRequestDTO.java
package com.example.demo.data.request;
import com.example.demo.domain.HealthInfo;
import com.example.demo.domain.Review;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ReviewRequestDTO {
Long id;
String content;
HealthInfo healthInfo;
public static Review toEntity(ReviewRequestDTO dto){
return Review.builder()
.id(dto.getId())
.content(dto.getContent())
.healthInfo(dto.getHealthInfo())
.build();
}
}
ReviewResponseDTO.java
package com.example.demo.data.response;
import com.example.demo.data.request.ReviewRequestDTO;
import com.example.demo.domain.HealthInfo;
import com.example.demo.domain.Review;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
public class ReviewResponseDTO {
Long id;
String content;
Long healthid;
public static Review toEntity(ReviewResponseDTO dto){
return Review.builder()
.id(dto.getId())
.content(dto.getContent())
.build();
}
public ReviewResponseDTO(Review review){
this.id=review.getId();
this.content=review.getContent();
this.healthid=review.getHealthInfo().getId();
}
}
public ReviewResponseDTO(Review review){
this.id=review.getId();
this.content=review.getContent();
this.healthid=review.getHealthInfo().getId();
์ด ๋ถ๋ถ์์ healthid๋ Reviewํด๋์ค์ ์ ์๋์ด์๋ healthInfo๊ฐ์ฒด๋ healthInfo์์ ์๋ ๋ชจ๋ ์ ๋ณด๋ค์ ๊ฐ์ง๊ณ ์๊ธฐ๋๋ฌธ์ ๊ทธ ์ค์ id๋ง ๊ฐ์ง๊ณ ์ค๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋ค!
ReviewService.java
package com.example.demo.service;
import com.example.demo.data.request.ReviewRequestDTO;
import com.example.demo.data.response.ReviewResponseDTO;
import java.util.List;
public interface ReviewService {
public ReviewResponseDTO readReview(Long id);
public List<ReviewResponseDTO> findReview(Long id);
public Long saveReview(Long id, ReviewRequestDTO reviewRequestDTO);
public boolean updateReview(Long id, ReviewRequestDTO reviewRequestDTO);
public boolean deleteReview(Long id);
}
๊ฒ์ํ ๊ตฌํํ์๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ , ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค ์ด๋ ๊ฒ ์ด 2๊ฐ์ง๋ก ๋๋์๋ค.
๊ฒ์ํ ๋ง๋ค์๋ ์ฝ๋๋ฅผ ๋ง์ด ์ฐธ๊ณ ํด์ ๊ตฌํ๋ฐฉ๋ฒ์ด ๊ฑฐ์ ๋น์ทํ์ง๋ง ๊ฐ์ฅ ๋ค๋ฅธ ์ ์ ์กฐํ์ด๋ค.
์ฒ์์ ๊ฒ์ํ๊ณผ ๋๊ฐ์ด ์ฐ๊ด๊ด๊ณ๋ง ์ค์ ํ๊ณ , review๋ฅผ review_id๋ก ์กฐํํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋๋ฐ ์๊ฐํด๋ณด๋ ๊ฒ์ํ์ ๋ณด๋ฉด ๊ฒ์๊ธ์์ ์๋ ๋๊ธ์ ๋ณด๊ธฐ ๋๋ฌธ์ findReivew๋ฉ์๋๋ฅผ ์๋กญ๊ฒ ์ ์ํ์๋ค !
ReviewServiceImpl.java
package com.example.demo.service.impl;
import com.example.demo.data.request.ReviewRequestDTO;
import com.example.demo.data.response.HealthResponseDTO;
import com.example.demo.data.response.ReviewResponseDTO;
import com.example.demo.domain.HealthInfo;
import com.example.demo.domain.Review;
import com.example.demo.repository.HealthRepository;
import com.example.demo.repository.ReviewRepository;
import com.example.demo.service.ReviewService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class ReviewServiceImpl implements ReviewService {
private final ReviewRepository reviewRepository;
private final HealthRepository healthRepository;
@Override
public Long saveReview(Long id, ReviewRequestDTO reviewRequestDTO) {
HealthInfo healthInfo = healthRepository.findById(id).
orElseThrow(()->new IllegalArgumentException
("๋๊ธ ์ฐ๊ธฐ ์คํจ: ํด๋น ๊ฒ์๊ธ์ด ์กด์ฌํ์ง ์์ต๋๋ค." + id));
reviewRequestDTO.setHealthInfo(healthInfo);
Review review = reviewRequestDTO.toEntity(reviewRequestDTO);
reviewRepository.save(review);
return reviewRequestDTO.getId();
}
@Override
public ReviewResponseDTO readReview(Long id){
Review review=reviewRepository.findById
(id).orElseThrow(RuntimeException::new);
return new ReviewResponseDTO(review);
}
@Override
public List<ReviewResponseDTO> findReview(Long id) {
HealthInfo healthInfo = healthRepository.findById(id).orElseThrow(()->
new IllegalArgumentException("ํด๋น ๊ฒ์๊ธ์ด ์กด์ฌํ์ง ์์ต๋๋ค."));
List<Review> reviews = healthInfo.getReviews();
return reviews.stream().map(ReviewResponseDTO::new).collect(Collectors.toList());
}
public boolean updateReview(Long id, ReviewRequestDTO reviewRequestDTO){
Review review=reviewRepository.findById(id)
.orElseThrow(()-> new IllegalArgumentException("ํด๋น ๋๊ธ์ด ์กด์ฌํ์ง ์์ต๋๋ค. "));
review.updateReview(reviewRequestDTO.getContent());
reviewRepository.save(review);
return true;
}
public boolean deleteReview(Long id){
reviewRepository.deleteById(id);
return true;
}
}
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ด๋ค.
์์ธํ๊ฒ ๊ธฐ๋ฅ์ ๊ด๋ จ๋ ๋ด์ฉ์ ๋ค์ ํฌ์คํ
์์ ํ๋ ค๊ณ ํ๋ค ! ๐ก
๋๊ธ๊ธฐ๋ฅ์ ๊ตฌํํ์ง 2์ฃผ ์กฐ๊ธ ์๋ ๊ฒ ๊ฐ์๋ฐ ์ ์ ๋จธ๋ฆฟ์์์ ์ฌ๋ผ์ง๊ณ ์๋ค OMG
๋ ์ค์ผ ์๊น๋จน์งใ
ใ
ํฌ์คํ
ํ๋ฉด์ ๋ค์ ๋ณต์ตํด์ผ๊ฒ ๋๐คญ