Flaming Soccer ball
SPRING BOOT

102일차 판매자 전용 페이지 구현 실습

leo lee 2023. 2. 22.
반응형

 온라인 쇼핑몰 유형의 사이트 - 판매자 전용 페이지 구현 실습

  • 카테고리 부분

 

*99일차(Day99)에서 했던 부분에 카테고리 부분의 기능을 활성화시켜 병합하는 실습을 진행하였다.

  • 카테고리에서 꼬리 물기로 이어지는 n단계 세부 카테고리를 원하는 형태로 뽑아내기 위한 SQL문을 작성
  • 검색과 리스트 셀렉트문에 병합시켰다.

 

*데이터베이스를 학습할 때(Dayy33 ~ Day47) 했던 부분들이기 때문에 따로 정리를 하지는 않겠다.

 

< Mapper >

<?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.jm.myweb.product.service.ProductMapper">
  	
  	<!-- 상품 등록 메서드 -->
  	<insert id="regist" parameterType="ProductVO">
  		insert into PRODUCT(prod_endDate, prod_category, prod_writer, prod_name, prod_price,
  			prod_count, prod_discount, prod_purchase_yn, prod_content, prod_comment)
  		values(#{prod_endDate}, #{prod_category}, #{prod_writer}, #{prod_name}, #{prod_price},
  			#{prod_count}, #{prod_discount}, #{prod_purchase_yn},
  			#{prod_content}, #{prod_comment})
  	</insert>

  	<!-- 리스트 조회 메서드(특정 id에 대한 정보만) -->
  	<select id="getList" resultType="ProductVO">
  		<!-- 
  		select * from product
  		where prod_writer = #{user_id}
  		and prod_name like concat('%', #{cri.searchName}, '%')
  		and prod_content like concat('%', #{cri.searchContent}, '%')
  		order by prod_id desc limit #{cri.pageStart}, #{cri.amount}
  		 -->
		select p.*, c.category_nav
		from (
			select * from product
			where prod_writer = #{user_id}
			and prod_name like concat('%', #{cri.searchName}, '%')
			and prod_content like concat('%', #{cri.searchContent}, '%')
	  		order by prod_id desc limit #{cri.pageStart}, #{cri.amount}
		) p
		left outer join (
			SELECT
					CONCAT(A1.group_ID, A1.CATEGORY_ID) AS CATEGORY_KEY,
					CASE A1.category_parent_LV
						WHEN 0 THEN A1.category_detail_NM
						WHEN 1 THEN CONCAT(A2.category_detail_NM,' > ', A1.category_detail_NM)
						WHEN 2 THEN CONCAT(A3.category_detail_NM, ' > ', A2.category_detail_NM,' > ', A1.category_detail_NM)
					END as CATEGORY_NAV
			FROM PRODUCT_CATEGORY A1
			LEFT OUTER JOIN PRODUCT_CATEGORY A2
			ON A1.CATEGORY_PARENT_LV = A2.CATEGORY_LV AND A1.CATEGORY_DETAIL_PARENT_LV = A2.CATEGORY_DETAIL_LV AND A1.GROUP_ID = A2.GROUP_ID
			LEFT OUTER JOIN PRODUCT_CATEGORY A3
			ON A2.CATEGORY_PARENT_LV = A3.CATEGORY_LV AND A2.CATEGORY_DETAIL_PARENT_LV = A3.CATEGORY_DETAIL_LV	
		) c
		on p.prod_category = c.category_key
  	</select>
  	
  	<!-- 전체 게시물 수 반환 메서드 -->
  	<select id="getTotal" resultType="Integer">
  		select count(*) from product
  		where prod_writer = #{user_id}
  		and prod_name like concat('%', #{cri.searchName}, '%')
  		and prod_content like concat('%', #{cri.searchContent}, '%')
  	</select>
  	
  	<!-- 카테고리 대분류 -->
  	<select id="getCategory" resultType="CategoryVO">
  		select * from product_category
  		where category_lv = 1
  	</select>

	<!-- 카테고리 중분류 & 소분류 - group_id, parent_lv, detail_parent_lv에 매칭 -->
	<select id="getCategoryChild" resultType="CategoryVO" parameterType="CategoryVO">
		select * from product_category
		where group_id = #{group_id}
		and category_parent_lv = #{category_lv}
		and category_detail_parent_lv = #{category_detail_lv}
	</select>
	

	<!-- 
	<insert id="regist" parameterType="ProductVO">
		insert into PRODUCT(prod_enddate,
		prod_writer,
		prod_name,
		prod_price,
		prod_count,
		prod_discount,
		prod_purchase_yn,
		prod_content,
		prod_comment )
		values( #{prod_enddate},
		#{prod_writer},
		#{prod_name},
		#{prod_price},
		#{prod_count},
		#{prod_discount},
		#{prod_purchase_yn},
		#{prod_content},
		#{prod_comment} )
	</insert>

	<select id="getList" resultType="ProductVO">
		select * from PRODUCT
		where prod_writer = #{user_id}

		<if test="cri.startDate != null and cri.startDate != '' ">
        <![CDATA[ and date_format(prod_enddate, '%Y-%m-%d') >= date_format( #{cri.startDate}, '%Y-%m-%d')]]>
		</if>
		<if test="cri.endDate != null and cri.endDate != '' ">
      <![CDATA[ and date_format(prod_enddate, '%Y-%m-%d') <= date_format( #{cri.endDate}, '%Y-%m-%d')   ]]>
		</if>
		<if test="cri.searchName != null and cri.searchName != '' ">
			and prod_name like concat('%', #{cri.searchName}, '%')
		</if>
		<if test="cri.searchContent != null and cri.searchContent != '' ">
			and prod_content like concat('%', #{cri.searchContent}, '%')
		</if>
		order by
		<if test="cri.searchPrice == 'asc' ">
			prod_price asc,
		</if>
		<if test="cri.searchPrice == 'desc' ">
			prod_price desc,
		</if>
		prod_id desc
		limit #{cri.pageStart}, #{cri.amount}
	</select>

	<select id="getTotal" resultType="int">
		select count(*) as total from PRODUCT
		where prod_writer = #{user_id}

		<if test="cri.startDate != null and cri.startDate != '' ">
        <![CDATA[ and date_format(prod_enddate, '%Y-%m-%d') >= date_format( #{cri.startDate}, '%Y-%m-%d')]]>
		</if>
		<if test="cri.endDate != null and cri.endDate != '' ">
      <![CDATA[ and date_format(prod_enddate, '%Y-%m-%d') <= date_format( #{cri.endDate}, '%Y-%m-%d')   ]]>
		</if>
		<if test="cri.searchName != null and cri.searchName != '' ">
			and prod_name like concat('%', #{cri.searchName}, '%')
		</if>
		<if test="cri.searchContent != null and cri.searchContent != '' ">
			and prod_content like concat('%', #{cri.searchContent}, '%')
		</if>
	</select>
  	 -->
  	
  	
  </mapper>
 
반응형

'SPRING BOOT' 카테고리의 다른 글

101일차 JQUERY  (0) 2023.02.22
100일차 REST API  (0) 2023.02.22
99일차 Spring Boot 판매자 페이지 구현 실습  (1) 2023.02.22
98일차 Spring Boot DB 연결  (0) 2023.02.15
98일차 Spring Boot Validation  (0) 2023.02.15

댓글