Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

게으른 완벽주의자의 개발자 도전기

[shop] 상품 상세페이지에서 구매하기 본문

Js

[shop] 상품 상세페이지에서 구매하기

머리방울 2022. 8. 28. 20:45

상품상세페이지에서 구매하기 버튼을 누르면 1)구매하기 쿼리실행, 2)구매이력에 남기는 작업을 하고자 한다.

먼저, 상품 상세페이지에서 구매하기 버튼을 누르면 

한 아이템만 구매하는것이기 때문에 장바구니에서 여러 상품을 구매하는 것과는 다르다.

 

1. mapper에서 쿼리작성

1) 구매하기

<insert id="insertBuy">
INSERT INTO SHOP_BUY(
MEM_ID
, BUY_CODE
, TOTAL_PRICE
) VALUES (
#{memId}
, #{buyCode}
, #{putCnt} * (SELECT ITEM_PRICE 
FROM SHOP_ITEM 
WHERE ITEM_CODE = #{itemCode})
)
</insert>

2)구매이력

<insert id="insertBuyDetail">
INSERT INTO BUY_DETAIL(
BUY_DETAIL_CODE
, ITEM_CODE
, BUY_CNT
, BUY_CODE
) VALUES(
 #{buyCode} ||'_01'

(BUY_DETAIL_CODE를 BUY_CODE뒤에 _01, _02 이런식으로 만들기로 했다)
, #{itemCode}
, #{buyCnt}
, #{buyCode}
)
</insert>

 

3) BUY_CODE 조회 

<select id="selectBuyCode" resultType="String">

SELECT 'BUY_' || LPAD(NVL(MAX(TO_NUMBER(SUBSTR(BUY_CODE,5))),0)+1, 3, 0) 
FROM SHOP_BUY

</select>

 

2. 인터페이스 메소드 작성

우리는 구매하기버튼을 클릭하면 구매진행과 동시에 구매이력에 남기는

작업을 할 것이다. 이는 트랜잭션 작업이다.

@Override
public void insertBuy(BuyDTO buy, BuyDetailDTO buyDetail) {

try {
구매하기
sqlSession.insert("buyMapper.insertBuy", buy);
구매이력
sqlSession.insert("buyMapper.insertBuyDetail", buyDetail);
둘 다 성공 시 커밋
sqlSession.commit();

} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback();
}
}

3. JS

1) jsp

<input type="submit" value="구매하기" onclick="detailBuy();">

 

2) JS

function detailBuy() {
//form태그 하나라서 굳이 id 안줘도 됌
const formTag = document.querySelector('form');

formTag.action = 'insertBuy.buy';
formTag.submit();

}

 

4. CONTROLLER

 if(command.equals("/insertBuy.buy")) {
        FORM태그로 받은 데이터 

        String itemCode = request.getParameter("itemCode");

        (form태그에서 hidden으로 가져옴)
        int putCnt = Integer.parseInt(request.getParameter("putCnt"));
        

         MEM_ID를 세션에서 가져옴
        HttpSession session = request.getSession();
        MemberDTO loginInfo = (MemberDTO) session.getAttribute("loginInfo");
        String memId = loginInfo.getMemId();
        
        다음에 들어갈 BUY_CODE 조회 
        String buyCode = buyService.selectBuyCode();
                
        BuyDTO buy = new BuyDTO();
        buy.setBuyCode(buyCode);
        buy.setMemId(memId);
        buy.setItemCode(itemCode);
        buy.setPutCnt(putCnt);
        
        BuyDetailDTO buyDetail = new BuyDetailDTO();
        buyDetail.setItemCode(itemCode);
        buyDetail.setBuyCode(buyCode);
        buyDetail.setBuyCnt(putCnt);
        
        
        구매하기 메소드 실행
        buyService.insertBuy(buy, buyDetail);