게으른 완벽주의자의 개발자 도전기
[shop] 상품 상세페이지에서 구매하기 본문
상품상세페이지에서 구매하기 버튼을 누르면 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);
'Js' 카테고리의 다른 글
[shop]장바구니에서 구매하기 버튼 클릭하여 구매하기(closest, parentElement) (0) | 2022.08.29 |
---|---|
[SHOP] 장바구니 선택한 상품 삭제하기( js로 form태그 실행, dataSet) (0) | 2022.08.28 |
[shop]장바구니 체크박스 (js event 활용하기) (0) | 2022.08.22 |