안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

 @Override
 public void onClick(View v) {
        switch (v.getId()){
            case R.id.Joinbtn: // 회원가입 버튼

                tid = id.getText().toString();
                tpw = pw.getText().toString();
                tpwConfirm = pwConfirm.getText().toString();
                tname = name.getText().toString();
                tbirth = birth.getText().toString();
                tphoneNum = phoneNum.getText().toString();
                pwCheck = Pattern.matches("^(?=.*\\d)(?=.*[~`!@#$%^&*()-])(?=.*[a-zA-Z]).{6,16}$", tpw);

                if(tid.trim().length() == 0 || tpw.trim().length() == 0 || tpwConfirm.trim().length() == 0 || tbirth.trim().length() == 			0 || tname.trim().length() == 0 || tphoneNum.trim().length() == 0){
                    Toast.makeText(this, "빈칸 없이 모두 입력하세요!", Toast.LENGTH_SHORT).show();
                    Log.d("minsu", "공백 발생");
                    return;
                }
	}
}

public Cursor searchId(String id){
     sql = "SELECT id FROM " + mDBopenHelper.DB_TABLE_USER + " WHERE id = " + "'" + id + "'";
     
     // 입력한 아이디를 조건으로 테이블에서 아이디를 검색
     c = mDB.rawQuery(sql, null);
     c.moveToNext();

     return c; // 커서 리턴
}

    반응형

  • Notice

  • 안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    분류 전체보기 (483)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    Front-End (53)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    Back-End (284)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    APP 개발 (2)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    개임개발 (18)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    리눅스 (Linux) (4)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    AWS (아마존 웹 서비스) (9)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    Algorithm (40)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    기술 면접 (3)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    자격증 (4)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    학점은행제 (2)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    개인 공부 (9)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    팀프로젝트 (1)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    개인프로젝트 (10)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    기타 프로그램 (7)

    안드로이드 스튜디오 장바구니 구현 - andeuloideu seutyudio jangbaguni guhyeon

    후기 (34)

  • Tags
    게시판 만들기 수정 프로젝트 스프링 삭제 일본소포 보내는 방법 모두유심 일본 국제 소포 전세 사기 막는법 포트폴리오 오라클 spring 보증금 위험도 분석 리포트 안드로이드 스튜디오 회원가입 unity 유니티 MySQL 에러 게시판

  • Recent Entries
    사은품 혜택 많은 곳, 티비 인터넷 설치 자급제폰 유심⋯.
    일본 국제소포 보내는 방법~.
    전세계약 조심해서 계약하려면?? (집품 서비스 활용).
    오라클 -> MySQL SQL 마이그레이션.

  • Recent Comments
    마침 찾아보던 글인데 글 올려주셔서 감사합니다 ㅎㅎ. Sp-ready 11.12
    혹시 can not instantiate the type Mongocli⋯. kyoungho 06.07
    지나가다.. 네트워크 ID 구하기 참 쉽게 배웠습니다. 감사합니다.. 취준생 05.12
    [2022-01-06 13:40:30.630] [main] WARN o⋯. 2321321321 01.06
    [2022-01-06 13:40:30.630] [main] WARN o⋯. 2321321321 01.06


상품관리 (장바구니 기능구현 - 삭제, 비우기, 수정)

Back-End/Spring 2019. 6. 14. 23:11

반응형

-장바구니 기능 구현-

데이터베이스에서 cart 테이블을 생성

1

2

3

4

5

6

create table cart(

cart_id number not null primary key, //cart_id를 null값이 오지못하게 하고 기본키로 설정함

userid varchar2(50not null, //userid를 null값이 오지못하게 설정

product_id number not null, //product_id를 null값이 오지못하게 설정

amount number default 0 //amount속성을 기본값을 0으로 설정

);

Colored by Color Scripter

cs

cart테이블에 제약조건을 추가한다.

(cart테이블에 cart_userid_fk라는 이름의 제약조건을 cart테이블에 있는 userid에 추가하고,

userid를 다른 테이블의 기본키를 참조하는 외래키로 설정하고, member테이블의 userid를 참조하도록 설정한다.)

(즉, member테이블의 userid가 변경되면 cart테이블에 있는 userid도 같이 변경된다는 뜻이다.)

만약에 cart테이블에 "insert into cart values (2,'kim',2,10)" 쿼리를 실행시켰을 때, 

member테이블에 id (kim)이라는 id값이 없기 때문에 자료를 넣을 수 없어 오류가 발생한다.

즉, member 테이블에 존재하는 id값만 cart 테이블에 넣을 수 있다는 뜻이다.

(이렇게 하는 이유는 id값이 서로 일치하지 않아서 오류가 발생할 수 있기 때문에 제약조건을 설정하는 것이다.)

1

2

alter table cart add constraint cart_userid_fk

foreign key(userid) references member(userid);

cs

  
   아래 3개의 테이블을 참조해서 서로 join한다.


  select name, product_name,price,amount,price*amount money

  //회원의 이름과, 상품의 이름,물건 한개의 가격, 장바구니에 담은 개수, 총 물건의 가격을 검색한다.

  from member m, product p, cart c

  //member테이블과, product테이블과, cart테이블로부터 검색

  where m.userid=c.userid and p.product_id=c.product_id;

  //member의 userid와 cart의 userid가 같고, product의 product_id와 cart의 product_id가 같을때

  //즉, 회원의 아이디와 상품을 사려는 회원이 같고, 상품의 번호와 카트의 번호가 같을때 

장바구니 테이블을 만들었으므로 테이블에 있는 데이터를 저장할 클래스가 필요하다.

DTO 클래스를 생성

CartDTO.java (테이블 3개를 join할 것을 대비해서 필드와 getter, setter을 생성한다)

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

package com.example.spring02.model.shop.dto;

public class CartDTO {

private int cart_id;

private String userid;

private String name;

private int product_id;

private String product_name;

private int price;

private int money;

private int amount;

public int getCart_id() {

return cart_id;

}

public void setCart_id(int cart_id) {

this.cart_id = cart_id;

}

public String getUserid() {

return userid;

}

public void setUserid(String userid) {

this.userid = userid;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getProduct_id() {

return product_id;

}

public void setProduct_id(int product_id) {

this.product_id = product_id;

}

public String getProduct_name() {

return product_name;

}

public void setProduct_name(String product_name) {

this.product_name = product_name;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

public int getMoney() {

return money;

}

public void setMoney(int money) {

this.money = money;

}

public int getAmount() {

return amount;

}

public void setAmount(int amount) {

this.amount = amount;

}

@Override

public String toString() {

return "CartDTO [cart_id=" + cart_id + ", userid=" + userid + ", name=" + name + ", product_id=" + product_id

+ ", product_name=" + product_name + ", price=" + price + ", money=" + money + ", amount=" + amount + "]";

}

}

Colored by Color Scripter

cs

CartDAO 인터페이스를 생성

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package com.example.spring02.model.shop.dao;

import java.util.List;

import com.example.spring02.model.shop.dto.CartDTO;

public interface CartDAO {

List<CartDTO> cartMoney();

void insert(CartDTO dto); //장바구니 추가

List<CartDTO> listCart(String userid); //장바구니 목록

void delete(int cart_id); //장바구니 개별 삭제

void deleteAll(String userid); //장바구니 비우기

void update(int cart_id); 

int sumMoney(String userid); //장바구니 금액 합계

int countCart(String userid, int product_id); //장바구니 상품 갯수

void updateCart(CartDTO dto); //장바구니 수정 

void modifyCart(CartDTO dto);

}

Colored by Color Scripter

cs

CartDAOImpl.java (DAO 인터페이스 구현 클래스)

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

package com.example.spring02.model.shop.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;

import org.springframework.stereotype.Repository;

import com.example.spring02.model.shop.dto.CartDTO;

@Repository

public class CartDAOImpl implements CartDAO {

//MyBatis를 호출하므로 sqlsession에 의존성을 주입해야한다.

@Inject

SqlSession sqlSession;

@Override

public List<CartDTO> cartMoney() {

// TODO Auto-generated method stub

return null;

}

//장바구니에 담기

@Override

public void insert(CartDTO dto) {

//dto에 저장된 값을 받아서 sql세션에 저장하고 cart.insert로 넘어감 mapper로.

sqlSession.insert("cart.insert", dto); 

}

@Override

public List<CartDTO> listCart(String userid) {

return sqlSession.selectList("cart.listCart", userid);

}

@Override

public void delete(int cart_id) {

sqlSession.delete("cart.delete", cart_id);

}

@Override

public void deleteAll(String userid) {

sqlSession.delete("cart.deleteAll", userid);

}

@Override

public void update(int cart_id) {

// TODO Auto-generated method stub

}

@Override

public int sumMoney(String userid) {

return sqlSession.selectOne("cart.sumMoney", userid); 

}

@Override

public int countCart(String userid, int product_id) {

// TODO Auto-generated method stub

return 0;

}

@Override

public void updateCart(CartDTO dto) {

// TODO Auto-generated method stub

}

@Override

public void modifyCart(CartDTO dto) {

sqlSession.update("cart.modify", dto);

}

}

Colored by Color Scripter

cs

sql세션에 dto에서 받은 값을 저장한 다음 mapper로 넘어간다.

cartMapper.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 다른 mapper와 중복되지 않도록 네임스페이스 기재 -->

<mapper namespace="cart">

<!-- 장바구니에 담기 -->

<insert id="insert">

insert into cart (cart_id, userid, product_id, amount)

values 

(seq_cart.nextval, #{userid}, #{product_id}, #{amount} )

//장바구니 담기 버튼을 누를때 실행되는 쿼리문

//cart_id와 userid, product_id, amount 값을 저장한다.

//cart_id는 하나씩 증가되어야하기때문에 시퀀스값으로 지정한다.

</insert>

Colored by Color Scripter

cs

CART 테이블에 시퀀스를 생성

(시퀀스를 생성하고 그 시퀀스의 시작값은 1로 하고 1씩 증가한다.)

1

2

3

create sequence seq_cart

start with 1

increment by 1;

cs

Service 생성

CartService.java (서비스 인터페이스 생성)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package com.example.spring02.service.shop;

import java.util.List;

import com.example.spring02.model.shop.dto.CartDTO;

public interface CartService {

List<CartDTO> cartMoney();

void insert(CartDTO dto);

List<CartDTO> listCart(String userid);

void delete(int cart_id);

void deleteAll(String userid);

void update(int cart_id);

int sumMoney(String userid);

int countCart(String userid, int product_id);

void updateCart(CartDTO dto);

void modifyCart(CartDTO dto);

}

Colored by Color Scripter

cs

CartServiceImpl.java (서비스 인터페이스 구현 클래스 생성)

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

package com.example.spring02.service.shop;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.example.spring02.model.shop.dao.CartDAO;

import com.example.spring02.model.shop.dto.CartDTO;

@Service //Service 단이라는 것을 표시

public class CartServiceImpl implements CartService {

@Inject //dao를 사용해야하기 때문에 @Inject로 의존성 부여

CartDAO cartDao;

@Override

public List<CartDTO> cartMoney() {

return null;

}

@Override

public void insert(CartDTO dto) {

cartDao.insert(dto);

}

@Override

public List<CartDTO> listCart(String userid) {

return cartDao.listCart(userid);

}

@Override

public void delete(int cart_id) {

cartDao.delete(cart_id);

}

@Override

public void deleteAll(String userid) {

cartDao.deleteAll(userid);

}

@Override

public void update(int cart_id) {

// TODO Auto-generated method stub

}

@Override

public int sumMoney(String userid) {

return cartDao.sumMoney(userid);

}

@Override

public int countCart(String userid, int product_id) {

// TODO Auto-generated method stub

return 0;

}

@Override

public void updateCart(CartDTO dto) {

// TODO Auto-generated method stub

}

@Override

public void modifyCart(CartDTO dto) {

cartDao.modifyCart(dto);

}

}

Colored by Color Scripter

cs

CartController.java (장바구니 컨트롤러)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//컨트롤러에서 메소드의 파라미터들은 갯수제한이 없고, 순서가 상관이 없다.

@RequestMapping("insert.do"//세부적인 url mapping

public String insert(@ModelAttribute CartDTO dto, 

HttpSession session) {

//@ModelAttribute는 sumit된 form의 내용을 저장해서 전달받거나, 다시 뷰로 넘겨서 출력하기 위해 사용되는 오브젝트 이다.

//도메인 오브젝트나 DTO의 프로퍼티에 요청 파라미터를 바인딩해서 한번에 받으면 @ModelAttribute 라고 볼 수 있다.

//@ModelAttribute는 컨트롤러가 리턴하는 모델에 파라미터로 전달한 오브젝트를 자동으로 추가해준다.

//로그인 여부를 체크하기 위해 세션에 저장된 아이디 확인

String userid=(String)session.getAttribute("userid");

if(userid==null) { 

//로그인하지 않은 상태이면 로그인 화면으로 이동

return "redirect:/member/login.do";

}

dto.setUserid(userid);

cartService.insert(dto); //장바구니 테이블에 저장됨

return "redirect:/shop/cart/list.do"//장바구니 목록으로 이동

}

Colored by Color Scripter

cs

CartController.java 중 일부 (장바구니 리스트 관련 메소드)

cartlist.jsp 페이지와 맵핑됨

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//cart_list페이지와 맵핑되는 메소드

@RequestMapping("list.do")

public ModelAndView list(HttpSession session, ModelAndView mav) {

Map<String, Object> map=new HashMap<>();

//hashmap은 map(key,value)로 이뤄져 있고,

//key값은 중복이 불가능 하고 value는 중복이 가능하다.

//value에 null값도 사용이 가능하다.

//전달할 정보가 많을 경우에는 HashMap<>을 사용하는 것이 좋다.

//장바구니에 담을 값들이 많기 때문에 여기선 HashMap<>를 사용한다.

String userid=(String)session.getAttribute("userid");

//session에 저장된 userid를 getAttribute()메소드를 사용해서 얻어오고 오브젝트 타입이기 때문에

//String 타입으로 타입변환한다.

if(userid!=null) { 

//로그인한 상태이면 실행

List<CartDTO> list=cartService.listCart(userid);//장바구니 목록

int sumMoney=cartService.sumMoney(userid);//금액 합계

int fee=sumMoney >= 30000 ? 0 : 2500

//배송료 계산

//30000원이 넘으면 배송료가 0원, 안넘으면 2500원

//hasp map에 장바구니에 넣을 각종 값들을 저장함

 map.put("sumMoney", sumMoney);

 map.put("fee", fee); //배송료

 map.put("sum", sumMoney+fee); //전체 금액

 map.put("list", list); //장바구니 목록

 map.put("count", list.size()); //레코드 갯수

//ModelAndView mav에 이동할 페이지의 이름과 데이터를 저장한다.

 mav.setViewName("shop/cart_list"); //이동할 페이지의 이름

 mav.addObject("map", map); //데이터 저장

return mav; //화면 이동

}else { //로그인하지 않은 상태

return new ModelAndView("member/login"""null);

//로그인을 하지 않았으면 로그인 페이지로 이동시킨다.

}

}

Colored by Color Scripter

cs

컨트롤러에서 로그인 여부를 알아야하고, 로그인한 상태이면 서비스와 DAO를 경유해서 mapper에서 "ListCart" id에 대한 쿼리를 실행시킨다.

CartServiceImpl.java (장바구니 서비스 구현 클래스) 중 일부

1

2

3

4

@Override

public List<CartDTO> listCart(String userid) {

return cartDao.listCart(userid);

}

Colored by Color Scripter

cs

CartDAOImpl.java (장바구니 DAO 구현 클래스) 중 일부

(ListCart태그가 호출된다)

1

2

3

4

@Override

public List<CartDTO> listCart(String userid) {

return sqlSession.selectList("cart.listCart", userid);

}

Colored by Color Scripter

cs

cartMapper.xml 중 일부

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<select id="listCart" resultType="com.example.spring02.model.shop.dto.CartDTO">

<!-- DAO에서 listCart라는 태그로 인해 실행되고 결과타입은 DTO타입으로 한다. (다른계층으로 보내기 위해서) -->

select cart_id, p.product_id, c.userid, name, product_name, amount, price, (price*amount) money

<!-- 장바구니의 번호, 상품 번호, 회원번호, 회원이름, 상품이름, 상품의양, 상품1개의 가격, 상품의 전체가격을 검색한다.-->

<!--양쪽 테이블에 다 있는 속성이면 어떤 테이블의 속성인지 정확히 표기해주어야 한다.--!>

from member m, cart c, product p

<!-- 회원테이블과, 장바구니 테이블과, 상품테이블로 부터 -->

where m.userid=c.userid and c.product_id=p.product_id and c.userid=#{userid} order by cart_id

<!--회원테이블의 회원id와 장바구니테이블의 회원id가 같고, 장바구니의 상품id와 상품테이블의 상품id가 같고, 장바구니테이블의 회원id가  장바구니에 저장되있는 회원id와 같을때-->

<!-- 장바구니에 관한 정보를 담은 sql문이다. -->

</select>

Colored by Color Scripter

cs

Mapper에서 SQL을 사용해서 검색한 목록을 list로 받아서 컨트롤러로 전달을 하고, 그 데이터를 바탕으로

sumMoney(총금액, 서비스와 DAO를 거쳐서 받고, 다시 Mapper을 거쳐서 컨트롤러로 받게됨)

CartServiceImpl.java (서비스 인터페이스 구현 클래스) 중 일부

1

2

3

4

@Override

public int sumMoney(String userid) {

return cartDao.sumMoney(userid);

}

Colored by Color Scripter

cs

CartDAOImpl.java (DAO 인터페이스 구현 클래스) 중 일부

1

2

3

4

@Override

public int sumMoney(String userid) {

return sqlSession.selectOne("cart.sumMoney"userid); 

}

Colored by Color Scripter

cs

cartMapper.xml 중 일부

(조인을 하는 이유는 장바구니 테이블에는 가격이 없기때문에 가격이 있는 다른 테이블과 join을 해야한다.)

1

2

3

4

5

<select id="sumMoney" resultType="int">

select nvl(sum(price*amount),0)

<!--금액과 상품갯수를 곱한값과 0을더해서 0이 나오는 것을 검색한다. -->

<!--그러니까 아무것도 담지 않았을때를 확인하는 것이다. -->

<!--빈값이 null이면 안되기 때문에 대체값으로 0이 출력되게끔 만들었다--!>

from cart c,product p

<!-- 장바구니 테이블과 상품 테이블로 부터 -->

where c.product_id=p.product_id and userid=#{userid}

<!--조건 : 장바구니테이블의 상품 id가 상품테이블의 상품 id와 같고, 요청하는 회원의 id와 같은 경우 -->

</select>

Colored by Color Scripter

cs

cart_list.jsp

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<%@ include file="../include/header.jsp" %>

<script>

$(function(){

$("#btnList").click(function(){

location.href="${path}/shop/product/list.do";

});

// 아래쪽에서 btnlist를 호출해서 실행되는 function() 함수 구문.

// list로 가는 링크를 만든다.

$("#btnDelete").click(function(){

if(confirm("장바구니를 비우시겠습니까?")){

location.href="${path}/shop/cart/deleteAll.do";

}

});

});

</script>

</head>

<body>

<%@ include file="../include/menu.jsp" %>

<h2>장바구니</h2>

<c:choose>

<c:when test="${map.count == 0 }">

<!-- when은 ~~일때 라는 뜻 그러니까 map의 count가 0일때... -->

<!-- xml파일에서 hashmap에 list를 넣어놓았기 때문에 현재 map에 자료가 들어있다.  -->

<!-- map에 자료가 아무것도 없다면 -->

장바구니가 비었습니다.

</c:when>

<c:otherwise>

<!-- map.count가 0이 아닐때, 즉 자료가 있을때 -->

<!-- form을 실행한다.  -->

<!-- form의 id를 form1로 하고, method 방식을 post로 한다. 그리고 update.do페이지로 이동시킨다. -->

<form id="form1" name="form1" method="post"

action="${path}/shop/cart/update.do">

<table border="1" width="400px">

<tr>

<th>상품명</th>

<th>단가</th>

<th>수량</th>

<th>금액</th>

<th>&nbsp;</th>

</tr>

<!-- map에 있는 list출력하기 위해 forEach문을 사용해 row라는 변수에 넣는다. -->

<c:forEach var="row" items="${map.list}">

<tr align="center">

<td>${row.product_name}</td>

<td><fmt:formatNumber value="${row.price}"

pattern="#,###,###" /></td>

<!-- fmt:formatNumber 태그는 숫자를 양식에 맞춰서 문자열로 변환해주는 태그이다 -->

<!-- 여기서는 금액을 표현할 때 사용 -->

<!-- ex) 5,000 / 10,000 등등등-->

<td><input type="number" name="amount" 

style="width:30px;"

value="<fmt:formatNumber value="${row.amount}"

                            pattern="#,###,###" />">

<!-- 물건의 개수 (amount)를 fmt태그를 사용해서 패턴의 형식에 맞춰서 문자열로 변환함 -->

<!--1,000 / 5,000 등등~  -->

<input type="hidden" name="cart_id"

value="${row.cart_id}">

</td>

<td><fmt:formatNumber value="${row.money}"

pattern="#,###,###" /></td>

<td><a href=

"${path}/shop/cart/delete.do?cart_id=${row.cart_id}">[삭제]</a>

<!-- 삭제 버튼을 누르면 delete.do로 장바구니 개별 id (삭제하길원하는 장바구니 id)를 보내서 삭제한다. -->

</td>

</tr>

</c:forEach>

<tr>

<td colspan="5" align="right">

장바구니 금액 합계 :

<fmt:formatNumber value="${map.sumMoney}"

pattern="#,###,###" /><br>

배송료 : ${map.fee}<br>

총합계 : <fmt:formatNumber value="${map.sum}"

pattern="#,###,###" />

</td>

</tr>

</table>

<button id="btnUpdate">수정</button>

<button type="button" id="btnDelete">장바구니 비우기</button>

//btnUpdate와 btnDelete id는 위쪽에 있는 자바스크립트가 처리한다.

</form>

</c:otherwise>

</c:choose>

<button type="button" id="btnList">상품목록</button>

</body>

</html>

Colored by Color Scripter

cs

-장바구니 삭제-



  ( 뷰 => 컨트롤러 => 서비스 => 모델(DAO) => mapper => 컨트롤러 => 뷰)
  
  
  cart_list.jsp에 있는 delete을 호출하면


  컨트롤러로 이동해 delete.do와 맵핑하고 서비스에 장바구니 id를 넘겨준다.


  서비스에서는 넘겨받은 id를 DAO에 저장하고, DAO에서는 태그 아이디가 delete인 태그를 mapper에 전달하고, id도 전달한다.


  mapper에서는 userid가 특정 id (사용자가 선택한 id)를 다 지우게끔 한다.


  그리고 장바구니를 삭제한 후에 다시 컨트롤러로 돌아와 list.jsp 파일로 이동한다.

cart_list.jsp (View) 중 일부

1

2

3

<td>

<a href= "${path}/shop/cart/delete.do?cart_id=${row.cart_id}">[삭제]</a>

</td>

Colored by Color Scripter

cs

cartController.java 중 일부

1

2

3

4

5

@RequestMapping("delete.do")

public String delete(@RequestParam int cart_id) {

cartService.delete(cart_id);

return "redirect:/shop/cart/list.do";

}

Colored by Color Scripter

cs

cartServiceImpl.java 중 일부

1

2

3

4

@Override

public void delete(int cart_id) {

cartDao.delete(cart_id);

}

Colored by Color Scripter

cs

cartDAOImpl.java 중 일부

1

2

3

4

@Override

public void delete(int cart_id) {

sqlSession.delete("cart.delete", cart_id);

}

Colored by Color Scripter

cs

cartMapper.xml 중 일부

1

2

3

4

<!-- 장바구니 개별 상품 삭제 -->

<delete id="delete">

delete from cart where cart_id=#{cart_id}

</delete>

Colored by Color Scripter

cs

-장바구니 비우기-



 ( 뷰 => 컨트롤러 => 서비스 => 모델(DAO) => mapper => 컨트롤러 => 뷰 )




  cart_list.jsp에 있는 javascript구문에서 deleteAll을 호출하면


  컨트롤러로 이동해 deleteAll.do와 맵핑하고 세션에서 유저의아이디를 가져와서 null이 아닐경우에 서비스로 아이디를 넘긴다.


  서비스에서는 넘겨받은 id로 DAO를 호출하고, DAO에서는 태그 아이디가 deleteAll인 태그를 mapper에 전달하고, id도 전달한다.


  mapper에서는 userid가 특정 id (사용자가 선택한 id)를 다 지우게끔 한다.


  그리고 장바구니를 전부다 비운 후에 다시 컨트롤러로 돌아와 list.jsp 파일로 이동한다.

cart_list.jsp (view)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<script>

$(function(){

$("#btnList").click(function(){

location.href="${path}/shop/product/list.do";

});

$("#btnDelete").click(function(){

if(confirm("장바구니를 비우시겠습니까?")){

location.href="${path}/shop/cart/deleteAll.do";

}

});

});

</script>

======================================================================

<button type="button" id="btnDelete">장바구니 비우기</button>

cs

CartController.java (controller)

1

2

3

4

5

6

7

8

@RequestMapping("deleteAll.do")

public String deleteAll(HttpSession session) {

String userid=(String)session.getAttribute("userid");

if(userid!=null) {

cartService.deleteAll(userid);

}

return "redirect:/shop/cart/list.do";

}

Colored by Color Scripter

cs

CartServiceImpl.java (Service)

1

2

3

4

@Override

public void deleteAll(String userid) {

cartDao.deleteAll(userid);

}

Colored by Color Scripter

cs

CartDAOImpl.java (model-DAO)

1

2

3

4

@Override

public void deleteAll(String userid) {

cartDao.deleteAll(userid);

}

Colored by Color Scripter

cs

cartMapper.xml

1

2

3

4

5

<!-- 장바구니 비우기 -->

<delete id="deleteAll">

delete from cart where userid=#{userid}

<!-- 장바구니테이블로부터 회원의 아이디와 삭제하고자하는 회원의 아이디가 같으면 장바구니에 있는 자료를 전부다 삭제 -->

</delete>

Colored by Color Scripter

cs

아래 책은 제가 공부할때 활용했던 책으로 추천드리는 책이니 한번씩 읽어보시는것을 추천드립니다!! ㅎㅎ

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

-장바구니 수정-

위의 삭제나 비우기와 구조가 거의 동일

반응형

저작자표시

'Back-End > Spring' 카테고리의 다른 글

파일업로드 형식, 관련 메소드  (0)2019.06.17
상품관리 (관리자 로그인/로그아웃)  (0)2019.06.17
상품관리 (로그인 / 로그아웃)  (0)2019.06.12
상품관리 (상품 상세 보기 구현)  (0)2019.06.12
상품관리 (상품 목록 보기 구현)  (0)2019.06.12

tags : spring, 기능구현, 비우기, 삭제, 상품관리, 쇼핑몰, 수정, 장바구니, 포트폴리오

: