Paper.Yellow
시작 전 조율용 프로젝트 - minishop 본문
GitHub - paperyellow/minishop
Contribute to paperyellow/minishop development by creating an account on GitHub.
github.com
초안
Product 판매 제품, 가격, 재고
Orders 제품id, 주문수량, 주문번호
Payment 주문번호, 총 주문 갯수, 주문 금액 [Orders 내용]
CRUD
삭제는 따로 없이 boolean으로 [재고있음/재고없음, 주문/주문취소]로 구별
Product - Select, Update, Insert
Orders - Update, Insert
Payment - Select, Update, Insert
11/15
기초 세팅
-엔티티, DAO, xml 파일 세팅
+ product xml 완료 (#1)
오류 1) xml 파일 주소 오류로 서버 실행 실패
11/17
주문하기, 주문취소하기 완료 (#2)
오류 2) 포스트맨 테스트시 오류
Service
ProductController
@RequiredArgsConstructor
@Controller
public class ProductController {
private final ProductService productService;
@GetMapping("/product")
public CMRespDto<?> list(Model model) {
List<Product> productList = productService.상품목록보기();
model.addAttribute("productList", productList);
return new CMRespDto<>(1, "목록보기성공", productList);
}
}
원인1)
원인2)
GET - 상품목록보기 성공
오류 3) Post 오류
새로운 값에 대한 반환이 되지 않고 1번 id로 반환되어 돌아옴
디버그 방법 ==========================
ProductService
ToString 어노테이션 달아서 확인하기 - Product / ProductReqDto
2번에서 productId가 null값이 나와서 전달 받은 값이 없어서 추가된 데이터가 출력되지 않았음. 수정 필요 11/18
h2데이터베이스 사용하는데 sql 자동 실행 설정을 못해서 코드 수정해서 서버 재실행할때마다 웹서버에서 계속 값을 수동으로 넣어줘야해서 불편했음.
=> 자동 실행 포스팅 해둠.
스프링부트 h2 데이터베이스 sql 자동 실행
schema.sql 테이블 파일 drop table product; drop table orders; drop table payment; create table product( soldout BOOLEAN, product_id int primary KEY AUTO_INCREMENT, name VARCHAR(24) NOT null, price INT NOT null, stock INT NOT null ); create table order
paper-y.tistory.com
수정1) Product.java 수정 - 11/21
수정2-1) ProductService 코드 수정
public ProductInsertRespDto insert(ProductInsertReqDto productInsertReqDto) {
productDao.insert(productInsertReqDto.toEntity());
ProductInsertRespDto productInsertRespDto = productDao.insertProductResult(productInsertReqDto.getName());
return productInsertRespDto;
}
수정2-2) sql 변경
<select id="insertProductResult" resultType="~web.dto.ProductRespDto$ProductInsertRespDto">
select *
from (SELECT *
FROM product
WHERE Name = #{productName}
order by product_id desc)
fetch first rows only
</select>
fetch가 order by보다 빨리 실행되기 때문에 ()로 묶음.
productName은 primary KEY가 아니기 때문에 모든 내용을 select 한 후 desc로 최신순으로 정렬 > fetch로 젤 위에 내용을 가져옴.
최종 완료 )
조율사항
1. DTO명
ㅁRequest/Response :
ㄴ엔티티 + Req/Resp + Dto
ㅁ내부 클래스
ㄴ엔티티 + 동사 + 목적어 + Req/Resp +Dto
2. 테이블
id 변수명 그냥 하지말고 엔티티 명 붙여서 만들기 ex) id => productId
3. 메서드 앞 동사 이름 통일
insert / update / find
'프로젝트 > 파이널 프로젝트' 카테고리의 다른 글
회원가입 (0) | 2022.12.13 |
---|---|
더미데이터 생성 (0) | 2022.12.06 |
Email 인증 기능 구현 (0) | 2022.11.27 |