순서
1. AdminServiceImpl.java
2. 실행 테스트
1. AdminServiceImpl.java
Mapper 단계에서 imageEnroll() 메서드는 하나의 이미지 관련 데이터(AttachImageVO)를 전달받아 처리하도록 작성했습니다.
문제는 SwanVO 클래스엔 여러 개 이미지 관련 데이터를 처리할 수 있도록 List 타입의 참조 변수, imageList가 선언되어 있다는 것입니다.
그렇기 때문에 imageEnroll() 메서드가 데이터를 처리할 수 있도록 imageList를 통째로 넘겨주면 안 되고, imageList의 각 요소들을 한 개씩 넘겨줘야 합니다.
따라서 imageList의 요소 크기만큼 반복하여 imageEnroll() 메서드를 호출할 수 있도록 for문을 사용했습니다.
for문은 일반 for문, 향상된 for문, 람다식을 활용한 for문 중 원하는 방식으로 하면 되는데, 저는 람다식을 활용한 for문으로 구현했습니다.
// 일반적 for문
for(int i = 0; i < swan.getImageList().size(); i++) {
}
// 향상된 for문
for(AttachImageVO attach : swan.getImageList()) {
}
//람다식 활용한 for문
swan.getImageList().forEach(attach ->{
});
SwanVO의 product_id 값을 SwanVO의 imageList 요소에 있는 AttachImageVO의 product_id에 값을 대입해주기 위해 for문 구현부에 아래와 같은 코드를 추가해줍니다.
swan.getImageList().forEach(attach -> {
attach.setProduct_id(swan.getProduct_id());
});
이미지 등록에 필요한 product_id 값을 세팅 후, Mapper 단계의 imageEnroll() 메서드를 호출하고 매개변수로 SwanVO의 imageList 요소를 매개변수로 부여했습니다.
해당 for문으로 imageList의 요소 수만큼 각각을 product_id 값으로 세팅해주고, imageEnroll() 메서드를 호출하게 됩니다.
swan.getImageList().forEach(attach -> {
attach.setProduct_id(swan.getProduct_id());
adminMapper.imageEnroll(attach);
});
사용자가 상품 등록을 할 때, 상품 이미지를 첨부하지 않은 경우에 서버는 굳이 위의 for문을 실행시킬 필요가 없기 때문에 이미지 존재 여부를 체크하여 Service 단계의 swanEnroll() 메서드가 조기 종료될 수 있도록 보완적인 코드를 추가했습니다.
이미지의 존재 여부를 확인하는 방법은 SwanVO 객체의 imageList 참조 변수 값을 확인하는 것입니다.
imageList가 null 또는 imageList 변수가 참조하는 객체가 생성되었더라도 요소 수가 0개라면, 이미지 파일은 없는 것입니다.
if (swan.getImageList() == null || swan.getImageList().size() <= 0) {
return;
}
2. 실행 테스트
서버를 구동시켜 등록 테스트를 해봅니다.
'😎 STS3 Spring 쇼핑몰' 카테고리의 다른 글
STS3 쇼핑몰 프로젝트[27] 업로드 이미지 정보 등록 - 4(트랜잭션 적용) (0) | 2022.10.02 |
---|---|
STS3 쇼핑몰 프로젝트[27] 업로드 이미지 정보 등록 - 2 (0) | 2022.10.01 |
STS3 쇼핑몰 프로젝트[27] 업로드 이미지 정보 등록 - 1 (0) | 2022.10.01 |
STS3 쇼핑몰 프로젝트[26] 업로드 이미지 삭제 - 2 (0) | 2022.09.30 |
STS3 쇼핑몰 프로젝트[26] 업로드 이미지 삭제 - 1 (0) | 2022.09.30 |