본문 바로가기

SpringBoot

[SpringBoot] 판매자 관리 페이지 프로젝트(실습) - 공통 부분 템플릿화 하기, 상품 등록 기능 구현

728x90

 

 

 

 

 

 

 


 

 

판매자 매니저

    1️⃣ 구현 순서

    2️⃣ 페이징 처리

    3️⃣ 검색 처리 ( 동적 쿼리 )

 

 

판매자 매니저 ( Sales Manager )란?

  애플리케이션의 종류에는 일반 유저가 사용하는 application,

  공무원, 회사, 기관, 학교, 연구소 등에서 특정 유저가 사용하는 application이 있다

  B2B(Business-to-Business)은 기업과 기업 사이의 거래를 기반으로 만들어진 프로젝트이다

  이번에 진행할 프로젝트는 인터파크, 11번가, 쿠팡 같은 사이트의 판매자로 등록된 사람들이 물건을 등록하는     

  application의 일부이다

 

 

데이터 베이스를 연결을 통해 다음과 같이 처리할 예정이다


게시판 구현 순서는 다음과 같이 진행될 것이다

 1️⃣  테이블 생성
 2️⃣  VO, DAO, Controller, Service 생성
 3️⃣  화면처리
 4️⃣  등록, 리스트 구현
 5️⃣  수정, 삭제 구현
 6️⃣  페이지 구현
 7️⃣  검색 구현


 

1️⃣ 상품 테이블 생성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

본격적으로 구현하기 전에 해야 하는 것 : 공통으로 들어가는 부분 템플릿화 하기 ( 가장 기본 중의 기본! )

 

 

두색으로 체크된 부분은 모든 화면에서 공통적으로 사용되기 때문에 코드를 단 한 글자라도 덜 쓰기 위해서는

템플릿화 해야 한다

 

 

 

위의 코드처럼 계속 바뀌는 부분인 body를 fragment로 조각내고 공통되는 부분은 템플릿화 해서 모든 화면에서 사용하면 효율적인 코드가 된다 

 

 

 2️⃣  VO, DAO, Controller, Service 생성

   UI를 통해 어떠한 데이터가 필요한지 파악하기!

 

 

 

위의 UI를 통해 필요한 변수를 파악하고 다음과 같이 VO객체를 만들어 주고

유효성 검사가 필요한 데이터도 따로 유효성 검사 어노테이션을 주입해주었다

 

 

ProductVO 

package com.coding404.myweb.command;

import java.time.LocalDateTime;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;


/*
 * @NotNull - null값만 허용하지 않음 (wrapper의 integer, long, string등)
 * @NotBlank - null값과 공백허용하지 않음 (String에만 적용)
 * @NotEmpty - null값을 허용하지 않음(Array, list 적용)
 * @Pattern - 정규표현식에 맞는 문자열을 정의할 수 있음(String에만 적용)	
 * @Email - 이메일형식 검즌(공백은 통과)
 * @Min - 최솟값
 * @Max - 최댓값
 * 
 */


@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ProductVO {

	private int prod_id;
	private LocalDateTime prod_regdate;
	
	
	@NotBlank(message = "공백일 수 없습니다")
	@Pattern(regexp ="[0-9]{4}-[0-9]{2}-[0-9]{2}")
	private String prod_enddate;
	
	private String prod_category;
	
	@NotBlank(message = "공백일 수 없습니다")
	private String prod_writer;
	
	@NotBlank(message = "공백일 수 없습니다")
	private String prod_name;
	
	@Min(value = 0, message = "0원 이상이어야 합니다")
	private int prod_price;
	
	private int prod_count;
	private int prod_discount;
	private String prod_purchase_yn;
	private String prod_content;
	private String prod_comment;
	
}

 

ProductController

package com.coding404.myweb.controller;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.coding404.myweb.command.ProductVO;
import com.coding404.myweb.product.service.ProductService;
import com.coding404.myweb.util.Criteria;
import com.coding404.myweb.util.PageVO;

@Controller
@RequestMapping("/product")
public class ProductController {
	
	@Autowired
	@Qualifier("productService")
	private ProductService productService;
	
	

	@GetMapping("/productList")
	public String list(HttpSession session,
						Model model,
						Criteria cri) {/* HttpServletRequest request */
		
		/*
		 1. 검색폼에서는 키워드, page, amount 데이터를 넘긴다
		 2. 목록 조회 and total 동적쿼리로 변경
		 3. 페이지네이션에 키워드, page, amount 데이터를 넘긴다
		 */
		
		
		//프로세스 
		//admin이라고 가정(사용할 값이 현재 없기 때문에)
		session.setAttribute("user_id", "admin");
		
		//로그인한 회원만 조회
		System.out.println(cri.toString());
		
		String user_id = (String)session.getAttribute("user_id");
		ArrayList<ProductVO> list = productService.getList(user_id, cri);
		model.addAttribute("list", list);
		
		//페이지네이션 처리
		int total = productService.getTotal(user_id, cri);
		PageVO pageVO = new PageVO(cri, total);
		
		model.addAttribute("pageVO", pageVO);
		
		return "product/productList";
	}
	
	//상세페이지로
	@GetMapping("/productDetail")
	public String detail() {
		return "product/productDetail";
	}
	

	//등록화면으로
	@GetMapping("/productReg")
	public String reg() {
		return "product/productReg";
	}
	
	
	
	//등록 버튼 누르면 넘어가는 화면 
	@PostMapping("/registForm")
	public String registForm(/*Valid*/ ProductVO vo,
							RedirectAttributes ra) {
		
		int result = productService.regist(vo);
		System.out.println(result);
		String msg = result == 1 ? "정상적으로 입력되었습니다" : "등록에 실패하였습니다";
		ra.addFlashAttribute("msg", msg);
		
		return "redirect:/product/productList"; //목록화면으로
		
	}
	

}

 

 

 

🔹productReg ( 글 등록 기능 )

 

   Service, Mapper 처리

 

 

등록 기능을 통해 등록을 할 때 폼 객체에 담기고 완료한 후에 리스트(상품 목록)화면으로 이동하도록 해주었다

 

 

 

글을 정상적으로 입력이 되었다면(정상 작동되었다면 정수 1을 반환) 다음과 같이 화면에 메세지를 전달해준다