장바구니를 구현하기 전에 로그인 사용자가 장바구니를 사용할 수 있도록 한다.
라. 회원로그인 실습 예제
1) views/include/menu.jsp
로그인 관련 링크를 만든다. 세션을 이용한다.
<c:choose>
<c:when test="${sessionScope.userid == null }">
<a href="${path}/member/login.do">로그인</a> |
</c:when>
<c:otherwise>
${sessionScope.name}님이 로그인중입니다.
<a href="${path}/member/logout.do">로그아웃</a>
</c:otherwise>
</c:choose>
1) member 테이블을 이용한다.
2) model.shop.MemberDTO.java
3) model.shop.MemberDAO.java
4) model.shop.MemberDAOImpl.java
5) mappers/member/memberMapper.xml
6) model.shop.MemberService.java
7) model.shop.MemberServiceImpl.java
8) controller.shop.MemberController.java
마. 장바구니 실습예제
1)장바구니 테이블
2) model.shop.CartDTO.java
3) model.shop.CartDAO.java
4) model.shop.CartDAOImpl.java
5) mappers/shop/cartMapper.xml
6) model.shop.CartService.java
7) model.shop.CartServiceImpl.java
8) controller.shop.CartController.java
장바구니 수정시
ajax를 이용해서 값을 chage할때 chage이번트를 걸어서
서버에 값 백그라운드에서 수정하는 방법이 있는데
여기서는 한꺼번에 반복처리를 해서 수정하도록 한다.
수정 후 리스트로 돌아온다.
수정버튼을 누르면 action="${path}/shop/cart/update.do"
form 안의 amount가 배열로 처리가 된다.
name="amount" => 받는 쪽에서 배열로 받는다. int[] amount
name="cart_id" => 받는 쪽에서 배열로 받는다. int[] cart_id
drop table cart cascade constraints;
create table cart (
cart_id number not null primary key, -- 장바구니 코드(일련번호)
userid varchar2(50) not null, -- 아이디
product_id number not null, -- 상품코드
amount number default 0 -- 수량
);
select * from member;
select * from product;
-- gksmf이 1번 상품을 3개 장바구니에 담음
insert into cart (cart_id, userid, product_id, amount)
values (1,'gksmf',1,3);
select * from cart;
member테이블에 없는 사용자 이름으로 입력
insert into cart values (2,'difname',2,10);
select name, product_name, price, amount, price*amount money
from member m, product p, cart c
where m.userid=c.userid and p.product_id = c.product_id;
결과값:
name | product_name | price | amount | money
하늘이 | 레몬 | 1500 | 3 | 4500
rollback;
-- foreign key 설정
alter table cart add constraint cart_userid_fk
foreign key(userid) references member(userid);
-- 제약조건 삭제
alter table cart drop constraint car_productid_fk
-- 제약조건 추가
alter table cart add constraint car_productid_fk
foreign key(product_id) references product(product_id);
제약조건 설정후 아래 코드는 오류가 생김
insert into cart values (2,'difname',2,10);
-- 존재하지 않는 상품코드
-- 무결성 제약조건(SPRING.CART_PRODUCTID_FK)이 위배되었습니다
장바구니 담기 기능을 구현중인데
지금까지는 장바구니 테이블을 만들었으니
상품정보를 담을 객체가 필요하다.
CartDTO 클래스를 만든다.
CartDAO 인터페이스와
CartDAOImpl 구현클래스를 작성하고
CartDAOImpl에서 mybatis를 호출한다.
sqlSession.insert("cart.insert", dto);
resources/mappers/shop/에 cartMapper.xml을 만들고
insert문을 작성한다.
<insert id="insertCart">
insert into cart (cart_id, userid, product_id, amount)
values (seq_cart.nextval, #{userid}, #{product_id}, #{amount})
</insert>
시퀀스를 적용했는데 아래는 시퀀스를 만드는 쿼리문
먼저 장바구니 데이터를 모두 비워준다 (롤백해도 된다.)
create sequence seq_cart
start with 1
increment by 1;
==> Sequence SEQ_CART이(가) 생성되었습니다.
장바구니 입력이 완료되면 장바구니 리스트로 이동한다.
@RequestMapping("insert.do")
public String insert(@ModelAttribute CartDTO dto, HttpSession session) {
.....
return "redirect:/shop/cart/list.do"; // 장바구니 목록으로 이동
}
@RequestMapping("list.do")
public ModelAndView list(ModelAndView mav, HttpSession session) {
cartService.listCart(userid)
cartService.sumMoney(userid);
...
}
cartMapper.xml의 listCart를 본다.
아래의 쿼리문을 직접 던져본다.
select
cart_id, p.product_id, c.userid, name,
product_name, amount,
price, (price*amount) money
from member m, cart c, product p
where m.userid = c.userid and c.product_id = p.product_id
and c.userid = 'gksmf'
order by cart_id
세개의 테이블을 조인하는데
양쪽에 있는 경우는 p나 c와 같은 alias를 붙여주고
한 곳만 있는 경우는 컬럼명만 적어준다.
money컬럼은 세개의 테이블에 존재하는 않는다.
(price*amount)를 money라는 alias로 만든다.
'프로그래밍 > JAVA & SPRING' 카테고리의 다른 글
[LifeSoft] spring 11강 itextpdf를 활용한 pdf 파일 만들기 (0) | 2020.06.07 |
---|---|
[LifeSoft] spring 10강 관리자 로그인/로그아웃 기능, 상품 등록/수정/삭제 (0) | 2020.06.07 |
[LifeSoft] spring 8강 상품관리(상품목록, 상세화면) (0) | 2020.06.07 |
[LifeSoft] spring 7강 상품테이블 만들기, file upload 테스트 (0) | 2020.06.07 |
[기타] spring study 모임에서 공부한 내용들 (0) | 2020.06.07 |