Spring
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값을 세션으로 받아 로그인과 비슷한 환경을 설정한다.
로그인 세션은 서블릿에서 또는 컨트롤러에서 가능하다.
장바구니는 내일 계속 ,, !