코딩/Spring 쇼핑몰 프로젝트

Spring [쇼핑몰프로젝트] - 장바구니 구현[25]

유미._. 2023. 5. 16. 14:37
728x90

 

 

오늘은 장바구니 기능 구현에 대한 두번째 포스팅을 해보겠습니다 ╰(*°▽°*)╯2

 

 

 

구현 순서

 

1. CartMapper.java

2. CartMapper.xml

3. CartMapperTests.java

 

1. CartMapper.java

 

com.amgel.mapper 패키지에 CartMapper.java 인터페이스를 생성해 줍니다.

카트에 필요한 5개의 메서드를 추가해 줍니다.

 

addCart 메서드는 테이블의 열을 추가해 주기 위한 메서드 입니다. memberId 와 product_num 과 amount 값을 필요로 합니다. 이를 한 번에 가져 올 수 있도록 CartDTO를 파라미터 변수로 선언해 주었습니다. 열 추가시 1을 반환하고, 실패시 0을 반환하기 위해 int로 반환타입을 주었습니다.

 

deleteCart 메서드는 테이블의 열을 삭제해 주기 위한 메서드 입니다. 열을 지우기 위한 기준을 cart_num 으로 지정 하기 위해 파라미터 변수를 int 타입의 cart_num 으로 지정해 주었습니다.

 

modifyCount 메서드는 테이블의 지정한 열의 수량을 변경하는 메서드 입니다. 어떤 열을 수정할지 지정해 주는 cart_num과 수량 변경을 위한 amount 두 가지가 필요하기 때문에 CartDTO를 파라미터 변수로 설정하였습니다. 성공시 1을 반환하고, 실패시 0을 반환하기 위해 int로 반환타입을 주었습니다.

 

getCart 메서드는 cart테이블에서 지정한 회원의 모든 열(데이터)의 값을 가져오기 위한 메서드 입니다. 회원의 정보가 필요하기 때문에 String 타입의 memberId를 파라미터 변수로 설정해 주었습니다. 반환타입은 한 개 이상의 데이터를 받아와야 하기 때문에 List<CartDTO>로 주었습니다.

 

checkCart 메서드는 회원정보와 상품정보를 넘겨서 해당하는 열이 있는지 확인하기 위한 메서드 입니다. memberId와 product_num을 한 번에 넘기기 위해 CartDTO 타입으로 파라미터 변수를 선언하였습니다. 반환타입도 조건에 맞는 열의 컬럼값을 가져오도록 하기 위해 CartDTO로 지정해 주었습니다.

 

 

 

2. CartMapper.xml

 

src/main/resources 경로의 com/angel/mapper 파일에 CartMapper.xml을 생성해 줍니다.

CartMapper.xml 파일에 MyBatis를 사용하기 위한 기본 세팅을 해줍니다.

 

<?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 namespace="com.angel.mapper.CartMapper">
	
  </mapper>

 

 

 

CartMapper.java 에 생성한 메서드에 맞게 실행할 쿼리를 작성해 줍니다.

Cart 테이블을 생성하면서 시퀀스를 같이 생성해 주었기 때문에, 카트 추가에는 cart_seq.nextval을 넣어 줍니다.

 

<?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 namespace="com.angel.mapper.CartMapper">

	<!-- 카트추가 -->
	<insert id="addCart">
		insert into cart(cart_num, memberId, product_num, amount)
		values(cart_seq.nextval, #{memberId}, #{product_num}, #{amount})
	</insert>
	
	<!-- 카트 삭제 -->
	<delete id="deleteCart">
		delete from cart where cart_num = #{cart_num}
	</delete>
	
	<!-- 카트 수량 수정 -->
	<update id="modifyCount">
		update cart set amount = #{amount} where cart_num = #{cart_num}
	</update>
	
	<!-- 카트 목록 -->
	<select id="getCart" resultType="com.angel.model.CartDTO">
		select a.cart_num, a.memberId, a.product_num, a.amount, b.product_num
		from cart a left outer join product_tbl b on a.product_num = b.product_num
		where memberId = #{memberId}
	</select>
	
	<!-- 카트 확인 -->
	<select id="checkCart" resultType="com.angel.model.CartDTO">
		select * from cart where memberId = #{memberId} and product_num = #{product_num}
	</select>
	
  </mapper>

 

 

3. CartMapperTests.java

 

src/test/java 파일에 있는 com.angel.mapper 패키지에 CartMapperTest.java 클래스를 생성해 줍니다.

Junit 테스트를 위한 기본적인 세팅을 해줍니다.

 

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
public class CartMapperTests {

	@Autowired
	private CartMapper mapper;
	
}

 

 

 

① addCart 메서드 테스트

테스트를 진행 할 때, memberId 와 product_num 값은 데이터베이스에 존재하는 값을 입력해야 합니다.

 

	@Test
	public void addCart() {
		String memberId = "시은";
		Long product_num = 101L;
		int amount = 5;
		
		CartDTO cart = new CartDTO();
		cart.setMemberId(memberId);
		cart.setProduct_num(product_num);
		cart.setAmount(amount);
		
		int result = 0;
		result = mapper.addCart(cart);
		
		log.info("결과 : " + result );
	}

 

 

데이터 베이스에 값이 잘 들어갔는지 확인해 줍니다.

 

 

 

② deleteCart 메서드 테스트 

 

	@Test
	public void deleteCart() {
		
		int cart_num = 3;
		
		mapper.deleteCart(cart_num);
	}

 

데이터 베이스에서 cart_num이 3인 채리가 사라졌는지 확인해 줍니다.

 

 

③ modifyCount 메서드 테스트

 

	@Test
	public void modifyCount() {
		
		int cart_num = 4;
		int amount = 10;
		
		CartDTO cart = new CartDTO();
		cart.setCart_num(cart_num);
		cart.setAmount(amount);
		
		mapper.modifyCount(cart);
	}

 

데이터 베이스에서 amount 값이 5에서 10으로 변경이 되었는지 확인해 줍니다.

 

 

④ getCart 메서드 테스트

 

	@Test
	public void getCart() {
		
		String memberId = "시은";
		
		List<CartDTO> list = mapper.getCart(memberId);
		for(CartDTO cart : list) {
			log.info(cart);
			cart.initSaleTotal();
			log.info("init cart : " + cart);
		}
	}

 

콘솔 창에서 확인해 줍니다.

 

 

 

⑤ checkCart 메서드 테스트

 

	@Test
	public void checkCart() {
		
		String memberId = "시은";
		Long product_num = 101L;
		
		CartDTO cart = new CartDTO();
		cart.setMemberId(memberId);
		cart.setProduct_num(product_num);
		
		CartDTO resultCart = mapper.checkCart(cart);
		log.info("결과 : " + resultCart);
	}

 

콘솔창을 확인해 줍니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이상입니당 (∩^o^)⊃━☆

 

 

 

 

 

 

 

 

 

참고 : Kim VamPa (tistory.com) 👍

 

 

 

728x90
반응형