77일차_Spring

서창민·2023년 6월 29일
0

Spring

목록 보기
8/15
post-thumbnail

23.06.29 목 77일차

Spring

  • Shop 게시판 상품 목록보기 및 장바구니 담기
ShopVO

package com.jungbo.k1.shop;

import org.springframework.web.multipart.MultipartFile;

import lombok.Data;

@Data
public class ShopVO {
	 private int productId;			// 상품번호 (P.K)
	 private String productName; 	// 상품이름
	 private int productPrice; 		// 상품가격
	 private String productDesc; 	// 상품 상세설명
	 private String productImgStr; 	// 상품 사진 이름(파일명)
	 private MultipartFile productImg; 	// 상품 사진(실제 파일)

	 private String ch1;
	 private String ch2;
}

테이블의 칼럼 형식에따라 변수 지정

Dao, service

package com.jungbo.k1.shop;

import java.util.List;

public interface ShopDao {
	void insertShop(ShopVO vo);
	ShopVO getShop(ShopVO vo);
	List<ShopVO> getShopList(ShopVO vo);
}

레코드 삽입 Insert와 목록 리스트 목록 상세보기를 선언

ServiceImpl

package com.jungbo.k1.shop;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CartServiceImpl implements CartService{
	
	@Autowired
	private CartDao dao;
	
	@Override
	public void insert(CartVO vo) {
		dao.insert(vo);		
	}

	@Override
	public void update(CartVO vo) {
		dao.update(vo);
		
	}

	@Override
	public List<CartVO> count(CartVO vo) {
		return dao.count(vo);
	}

	@Override
	public List<CartVO> getCartList(CartVO vo) {
		return dao.getCartList(vo);
	}
}

컨트롤러의 명령을 되받아 DAO로 전달해주는 역할

DaoImpl

package com.jungbo.k1.shop;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class ShopDaoImpl implements ShopDao{
	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	String INSERT = "INSERT INTO tbl_product(product_id, product_name, product_price, product_desc, product_img)"
			+ " VALUES(seq_product.nextval, ?, ?, ?, ?)";
	String SELECT_ONE = "SELECT * FROM tbl_product WHERE product_id=?";
	String SELECT_ALL = "SELECT * FROM tbl_product order by product_id desc";
	String SELECT_ID = "SELECT * FROM tbl_product WHERE product_id=? ORDER BY product_id DESC";
	String SELECT_NAME = "SELECT * FROM tbl_product WHERE product_name=? ORDER BY product_id DESC";

	
			
	
	@Override
	public void insertShop(ShopVO vo) {
		Object args[]= {vo.getProductName(), vo.getProductPrice(), 
						vo.getProductDesc(), vo.getProductImgStr()};
		jdbcTemplate.update(INSERT,args);
		
	}

	@Override
	public ShopVO getShop(ShopVO vo) {
		Object args[]= {vo.getProductId()};
		return jdbcTemplate.queryForObject(SELECT_ONE, new ShopRowMapper(), args);
	}

	@Override
	public List<ShopVO> getShopList(ShopVO vo) {
		if(vo.getCh1() == null || vo.getCh2()=="" || vo.getCh2().equals("")) {
			return jdbcTemplate.query(SELECT_ALL, new ShopRowMapper());
		}else if(vo.getCh1().equals("product_id")) {
			return jdbcTemplate.query(SELECT_ID, new ShopRowMapper(), "%"+ vo.getCh2() +"%");
		}else if(vo.getCh1().equals("product_name")){
			return jdbcTemplate.query(SELECT_NAME, new ShopRowMapper(), "%"+ vo.getCh2() +"%");
		}
		return null;
	}
}

실질적인 쿼리문으로 DB에 저장해주는 동작을 선언하는 파일

RowMapper

package com.jungbo.k1.shop;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

public class ShopRowMapper implements RowMapper<ShopVO>{

	@Override
	public ShopVO mapRow(ResultSet rs, int rowNum) throws SQLException {
		ShopVO m = new ShopVO();
		m.setProductId(rs.getInt("product_id"));
		m.setProductName(rs.getString("product_name"));
		m.setProductPrice(rs.getInt("product_price"));
		m.setProductDesc(rs.getString("product_desc"));
		m.setProductImgStr(rs.getString("product_img"));
		return m;
	}
}

LIST로 보일 테이블의 레코드 값을 리턴받는 Mapper

Controller

package com.jungbo.controller;

import java.io.File;
import java.text.SimpleDateFormat;

import javax.annotation.PostConstruct;
import javax.servlet.ServletContext;

import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.jungbo.k1.shop.ShopServiceImpl;
import com.jungbo.k1.shop.ShopVO;

@Controller
public class ShopController {
	String path = "";
	
	@Autowired
	ShopServiceImpl service;
	
	@Autowired
	private ServletContext servlet;
	
	@PostConstruct
	public void init() {
		path = servlet.getRealPath("/shop/files/");
		System.out.println("====>REAL PATH : " + path);
	}
	
	@RequestMapping(value="insertShop.do")
	public String insertShop(ShopVO vo) throws Exception {
		System.out.println("=====> insert확인 ");
		
		MultipartFile uploadFile = vo.getProductImg();
		
		//시 분 초 시간 추가
		long time = System.currentTimeMillis();
		SimpleDateFormat daytime = new SimpleDateFormat("HHmmss");
		String timeStr = daytime.format(time);
		System.out.println("시간 확인 : " + timeStr);
		
		// 파일이 첨부되는 실제 이름
		String fileName = uploadFile.getOriginalFilename();

		File f = new File(path+ fileName);

		// 중복 확인
		if(! uploadFile.isEmpty()) {
			if(f.exists()) {
				System.out.println("중복된 파일이 있습니다. !!");
				
				// 파일명만 표기하기 방법 1
				String fName = FilenameUtils.getBaseName(fileName);
				// 파일명만 표기하기 방법 2
//				String fName = fileName.substring(0, fileName.lastIndexOf("."));
				
				// 파일 확장자
				String Extention = fileName.substring(fileName.lastIndexOf("."));
				
				// 시간 포함된 파일명
				fileName = fName + "_" + timeStr + Extention;
				System.out.println(fileName);
			}
			uploadFile.transferTo(new File(path+ fileName));
		}else {
			System.out.println("파일이 첨부되지 않았습니다. !!");
			fileName ="space.png";
		}
		vo.setProductImgStr(fileName);
		service.insertShop(vo);
		
		return "/getShopList.do";
	}
	
	@RequestMapping(value="/getShop.do")
	public ModelAndView getShop(ShopVO vo, ModelAndView mav) {
		mav.addObject("m", service.getShop(vo));
		mav.setViewName("/shop/getShop.jsp");
		
		return mav;
	}
	
	@RequestMapping(value="/getShopList.do")
	public ModelAndView getShopList(ShopVO vo, ModelAndView mav) {		
		mav.addObject("li", service.getShopList(vo));
		mav.setViewName("/shop/getShopList.jsp");
		return mav;
	}
}

상세보기 화면을 선언할때 membert2 테이블의 m_idx값을 세션으로 받아 로그인과 비슷한 환경을 설정한다.

로그인 세션은 서블릿에서 또는 컨트롤러에서 가능하다.

장바구니는 내일 계속 ,, !

profile
Back-end Developer Preparation Students

0개의 댓글