-
2022-03-24 스프링부트 : 쇼핑몰#2학원/Spring 2022. 3. 24. 15:50
회원가입
MemberController
@RequestMapping(value="/contract") public String contract() { return "member/contract"; } @RequestMapping(value="/joinForm", method=RequestMethod.POST) public String join_form() { return "member/joinForm"; } @RequestMapping("/idCheckForm") public String id_check_form( @RequestParam("userid") String userid, Model model, HttpServletRequest request ) { HashMap<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put( "ref_cursor", null ); paramMap.put("userid", userid); ms.getMember(paramMap); ArrayList< HashMap<String,Object> > list = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor"); if(list.size() == 0) model.addAttribute("result", -1); else model.addAttribute("result", 1); model.addAttribute("userid", userid); return "member/idcheck"; } @RequestMapping(value="/findZipNum") public String find_zip( HttpServletRequest request , Model model) { String dong=request.getParameter("dong"); HashMap<String, Object> paramMap = new HashMap<String, Object>(); if(dong != null && dong.trim().equals("")==false){ paramMap.put( "ref_cursor", null ); paramMap.put("dong", dong); ms.selectAddressByDong(paramMap); ArrayList< HashMap<String,Object> > list = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor"); System.out.println(list.size() + dong); model.addAttribute("addressList" , list); } return "member/findZipNum"; } @RequestMapping(value = "/join", method=RequestMethod.POST) public String join( @ModelAttribute("dto") @Valid MemberVO membervo, BindingResult result, @RequestParam(value="reid", required=false) String reid, @RequestParam(value="pwdCheck", required=false) String pwdCheck, //required=false => null값 허용 HttpServletRequest request, Model model) { model.addAttribute("reid", "reid"); String url = "member/joinForm"; if(result.getFieldError("userid") != null) { model.addAttribute("message", result.getFieldError("userid").getDefaultMessage()); } else if(result.getFieldError("pwd") != null) { model.addAttribute("message", result.getFieldError("pwd").getDefaultMessage()); } else if(result.getFieldError("name") != null) { model.addAttribute("message", result.getFieldError("name").getDefaultMessage()); } else if(result.getFieldError("email") != null) { model.addAttribute("message", result.getFieldError("email").getDefaultMessage()); } else if(result.getFieldError("phone") != null) { model.addAttribute("message", result.getFieldError("phone").getDefaultMessage()); } else if(reid==null || (reid != null && !reid.equals(membervo.getUserid()))) { model.addAttribute("message", "아이디 중복체크를 하지 않으셨습니다."); } else if(pwdCheck==null || (pwdCheck != null && !pwdCheck.equals(membervo.getPwd()))) { model.addAttribute("message", "비밀번호 확인이 일치하지 않습니다."); } else { HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("userid", membervo.getUserid()); paramMap.put("pwd", membervo.getPwd()); paramMap.put("name", membervo.getName()); paramMap.put("email", membervo.getEmail()); paramMap.put("phone", membervo.getPhone()); paramMap.put("zip_num", membervo.getZip_num()); paramMap.put("address", membervo.getAddress()); paramMap.put("address2", membervo.getAddress2()); ms.insertMember(paramMap); model.addAttribute("message", "회원가입이 완료되었습니다. 로그인하세요."); url = "member/login"; } return url; }
MemberService
public void selectAddressByDong(HashMap<String, Object> paramMap) { mdao.getAddress( paramMap ); } @Transactional(rollbackFor = Exception.class) public void insertMember(HashMap<String, Object> paramMap) { mdao.insertMember(paramMap); }
MemberDao
<select id="getAddress" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL getAddress_s( #{dong}, #{ref_cursor , mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=memberMap} ) } </select> <insert id="insertMember" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL insertMember_s( #{userid},#{pwd},#{name},#{email},#{phone},#{zip_num},#{address},#{address2} )} </insert>
프로시저
CREATE OR REPLACE PROCEDURE getAddress_s( p_dong IN member2.address%TYPE, p_curvar OUT SYS_REFCURSOR ) IS BEGIN OPEN p_curvar FOR SELECT * FROM address WHERE dong LIKE '%'||p_dong||'%'; END; create or replace PROCEDURE insertMember_s( p_userid IN member2.userid%type, p_pwd IN member2.pwd%type, p_name IN member2.name%type, p_email IN member2.email%type, p_phone IN member2.phone%type, p_zip_num IN member2.zip_num%type, p_address IN member2.address%type, p_address2 IN member2.address2%type ) IS BEGIN insert into member2 (userid, pwd, name, email, phone, zip_num, address, address2) values (p_userid,p_pwd,p_name,p_email,p_phone,p_zip_num,p_address,p_address2); END;
회원정보 수정
MemberController
@RequestMapping("/memberEditForm") public String member_Edit_Form(Model model, HttpServletRequest request) { MemberVO dto = new MemberVO(); HttpSession session = request.getSession(); HashMap<String, Object> loginUser = (HashMap<String, Object>) session.getAttribute("loginUser"); dto.setUserid((String) loginUser.get("USERID")); dto.setName((String) loginUser.get("NAME")); dto.setEmail((String) loginUser.get("EMAIL")); dto.setPhone((String) loginUser.get("PHONE")); dto.setZip_num((String) loginUser.get("ZIP_NUM")); dto.setAddress((String) loginUser.get("ADDRESS")); dto.setAddress2((String) loginUser.get("ADDRESS2")); model.addAttribute("dto", dto); return "member/memberUpdateForm"; } @RequestMapping(value = "/memberUpdate", method=RequestMethod.POST) public String join( @ModelAttribute("dto") @Valid MemberVO membervo, BindingResult result, @RequestParam(value="pwdCheck", required=false) String pwdCheck, //required=false => null값 허용 HttpServletRequest request, Model model) { if(result.getFieldError("userid") != null) { model.addAttribute("message", result.getFieldError("userid").getDefaultMessage()); return "member/memberUpdateForm"; } else if(result.getFieldError("pwd") != null) { model.addAttribute("message", result.getFieldError("pwd").getDefaultMessage()); return "member/memberUpdateForm"; } else if(result.getFieldError("name") != null) { model.addAttribute("message", result.getFieldError("name").getDefaultMessage()); return "member/memberUpdateForm"; } else if(result.getFieldError("email") != null) { model.addAttribute("message", result.getFieldError("email").getDefaultMessage()); return "member/memberUpdateForm"; } else if(result.getFieldError("phone") != null) { model.addAttribute("message", result.getFieldError("phone").getDefaultMessage()); return "member/memberUpdateForm"; } else if(pwdCheck==null || (pwdCheck != null && !pwdCheck.equals(membervo.getPwd()))) { model.addAttribute("message", "비밀번호 확인이 일치하지 않습니다."); return "member/memberUpdateForm"; } HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("USERID", membervo.getUserid()); paramMap.put("PWD", membervo.getPwd()); paramMap.put("NAME", membervo.getName()); paramMap.put("EMAIL", membervo.getEmail()); paramMap.put("PHONE", membervo.getPhone()); paramMap.put("ZIP_NUM", membervo.getZip_num()); paramMap.put("ADDRESS", membervo.getAddress()); paramMap.put("ADDRESS2", membervo.getAddress2()); ms.updateMember(paramMap); HttpSession session = request.getSession(); session.setAttribute("loginUser", paramMap); return "redirect:/"; }
MemberService
@Transactional(rollbackFor = Exception.class) public void updateMember(HashMap<String, Object> paramMap) { mdao.updateMember(paramMap); }
MemberDao
<update id="updateMember" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL updateMember_s( #{USERID},#{PWD},#{NAME},#{EMAIL},#{PHONE},#{ZIP_NUM},#{ADDRESS},#{ADDRESS2} )} </update>
프로시저
create or replace PROCEDURE updateMember_s( p_userid IN member2.userid%type, p_pwd IN member2.pwd%type, p_name IN member2.name%type, p_email IN member2.email%type, p_phone IN member2.phone%type, p_zip_num IN member2.zip_num%type, p_address IN member2.address%type, p_address2 IN member2.address2%type ) IS BEGIN update member2 set pwd=p_pwd, name=p_name, email=p_email, phone=p_phone, zip_num=p_zip_num, address=p_address, address2=p_address2 where userid=p_userid; END;
카테고리 별 상품 리스트 / 상세보기
productController
@RequestMapping("/catagory") public ModelAndView catagore (Model model, HttpServletRequest request, @RequestParam("kind") String kind) { ModelAndView mav = new ModelAndView(); HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("ref_cursor", null); paramMap.put("kind", kind); ps.getKindList(paramMap); ArrayList<HashMap<String, Object>> list = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor"); mav.addObject("productKindList", list); mav.setViewName("product/productKind"); return mav; } @RequestMapping("/productDetail") public ModelAndView productDetail (Model model, HttpServletRequest request, @RequestParam("pseq") int pseq) { ModelAndView mav = new ModelAndView(); HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("ref_cursor", null); paramMap.put("pseq", pseq); ps.getProduct(paramMap); ArrayList<HashMap<String, Object>> list = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor"); HashMap<String, Object> resultMap = list.get(0); mav.addObject("productVO", resultMap); mav.setViewName("product/productDetail"); return mav; }
ProductDao
<select id="getKindList" statementType="CALLABLE" parameterType="java.util.HashMap"> {CALL getKindList( #{kind}, #{ref_cursor, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=productMap} )} </select> <select id="getProduct" statementType="CALLABLE" parameterType="java.util.HashMap"> {CALL getProduct( #{pseq}, #{ref_cursor, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=productMap} )} </select>
프로시저
create or replace PROCEDURE getBestNewProduct( p_kind IN product.kind%type, p_cur OUT SYS_REFCURSOR ) IS BEGIN open p_cur for select * from product where kind=; END;
장바구니 추가/리스트/삭제
CartController
@Controller public class CartController { @Autowired CartService cs; @RequestMapping("/cartInsert") public String cartInsert( HttpServletRequest request, Model model, @RequestParam("pseq") int pseq , @RequestParam("quantity") int quantity ) { HttpSession session = request.getSession(); HashMap<String, Object> loginUser = (HashMap<String, Object>) session.getAttribute("loginUser"); if( loginUser == null) { return "member/login"; }else { HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("id", loginUser.get("USERID")); paramMap.put("pseq", pseq); paramMap.put("quantity", quantity); cs.insertCart(paramMap); } return "redirect:/cartList"; } @RequestMapping("/cartList") public ModelAndView cartList( HttpServletRequest request ) { ModelAndView mav = new ModelAndView(); HttpSession session = request.getSession(); HashMap<String, Object> loginUser = (HashMap<String, Object>) session.getAttribute("loginUser"); if( loginUser == null) { mav.setViewName("member/login"); }else { HashMap<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("id", loginUser.get("USERID")); paramMap.put("ref_cursor", null); cs.listCart(paramMap); ArrayList<HashMap<String, Object>> list = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor"); mav.addObject("cartList", list); int totalPrice=0; for(HashMap<String, Object> cart : list) { totalPrice += Integer.parseInt(cart.get("QUANTITY").toString()) *Integer.parseInt(cart.get("PRICE2").toString()); } mav.addObject("totalPrice" , totalPrice); mav.setViewName("mypage/cartList"); } return mav; } @RequestMapping("/cartDelete") public String cartDelete(HttpServletRequest request) { String[] cseqArr = request.getParameterValues("cseq"); HashMap<String, Object> paramMap = new HashMap<String, Object>(); for( String cseq : cseqArr) { paramMap.put("cseq", cseq); cs.deleteCart(paramMap); } return "redirect:/cartList"; } }
CartDao
<?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.ezen.spm17.dao.ICartDao"> <resultMap id="cartMap" type="java.util.HashMap"></resultMap> <insert id="insertCart" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL insertCart( #{id}, #{pseq}, #{quantity} )} </insert> <select id="listCart" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL listCart( #{id}, #{ref_cursor , mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=memberMap} ) } </select> <delete id="deleteCart" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL deleteCart( #{cseq} ) } </delete> </mapper>
프로시저
create or replace PROCEDURE insertCart( p_id IN cart.id%type, p_pseq IN cart.pseq%type, p_quantity IN cart.quantity%type ) IS BEGIN insert into cart(cseq, id, pseq, quantity) values (cart_seq.nextVal, p_id, p_pseq, p_quantity); END; select * from cart_view; create or replace PROCEDURE listCart( p_id IN cart.id%type, p_cur OUT SYS_REFCURSOR ) IS BEGIN open p_cur for select * from cart_view where id=p_id; END; create or replace PROCEDURE deleteCart( p_cseq IN cart.cseq%type ) IS BEGIN delete from cart where cseq=p_cseq; END;
장바구니에서 주문
OrderController
package com.ezen.spm17.controller; import java.util.ArrayList; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import com.ezen.spm17.service.OrderService; @Controller public class OrderController { @Autowired OrderService os; @RequestMapping("/orderInsert") public String orderInsert(HttpServletRequest request) { int oseq = 0; HttpSession session = request.getSession(); HashMap<String, Object> loginUser = (HashMap<String, Object>) session.getAttribute("loginUser"); if(loginUser == null) { return "member/login"; } else { HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("id", loginUser.get("USERID")); paramMap.put("oseq", 0); os.insertOrder(paramMap); //아이디로 카트검색 //검색 내용으로 orders, order_detail 테이블에 레코드 추가 //oseq에 주문번호를 가지고 돌아옴 oseq = Integer.parseInt(paramMap.get("oseq").toString()); System.out.println(oseq); } return "redirect:/orderList?oseq="+oseq; } @RequestMapping("/orderList") public ModelAndView orderList(@RequestParam("oseq") int oseq, HttpServletRequest request, Model model) { ModelAndView mav = new ModelAndView(); HttpSession session = request.getSession(); HashMap<String, Object> loginUser = (HashMap<String, Object>) session.getAttribute("loginUser"); if(loginUser == null) { mav.setViewName("member/login"); } else { HashMap<String, Object> paramMap = new HashMap<String, Object> (); paramMap.put("oseq", oseq); paramMap.put("ref_cursor", null); os.listOrderByOseq(paramMap); ArrayList<HashMap<String, Object>> list = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor"); mav.addObject("orderList", list); int totalPrice = 0; for (HashMap<String, Object> ovo : list) { totalPrice += Integer.parseInt(ovo.get("QUANTITY").toString()) *Integer.parseInt(ovo.get("PRICE2").toString()); } mav.addObject("totalPrice", totalPrice); mav.setViewName("mypage/orderList"); } return mav; } }
OrderService
package com.ezen.spm17.service; import java.util.HashMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.ezen.spm17.dao.IOrderDao; @Service public class OrderService { @Autowired IOrderDao odao; @Transactional (rollbackFor = Exception.class) public void insertOrder(HashMap<String, Object> paramMap) { odao.insertOrder(paramMap); } public void listOrderByOseq(HashMap<String, Object> paramMap) { odao.listOrderByOseq(paramMap); } }
OrderDao
<?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.ezen.spm17.dao.IOrderDao"> <resultMap id="orderMap" type="java.util.HashMap"></resultMap> <insert id="insertOrder" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL insertOrder( #{id}, #{oseq, mode=OUT, jdbcType=INTEGER} )} </insert> <select id="listOrderByOseq" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL listOrderByOseq( #{oseq}, #{ref_cursor , mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=memberMap} ) } </select> </mapper>
프로시저
create or replace PROCEDURE insertOrder( p_id IN cart.id%type, p_oseq OUT orders.oseq%type ) IS temp_oseq orders.oseq%type; temp_cursor sys_refcursor; v_cseq cart.cseq%type; v_quantity cart.quantity%type; v_pseq cart.pseq%type; BEGIN --orders 테이블에 레코드 추가 insert into orders(oseq, id) values (order_seq.nextVal, p_id); --orders 테이블에서 가장 큰 oseq 조회 select max(oseq) into temp_oseq from orders where id=p_id; p_oseq := temp_oseq; --cart 테이블에서 id로 목록 조회 open temp_cursor for select cseq, pseq, quantity into v_cseq, v_pseq, v_quantity from cart where id=p_id and result='1'; Loop FETCH temp_cursor into v_cseq, v_pseq, v_quantity; EXIT WHEN temp_cursor%NOTFOUND; insert into order_detail(odseq, oseq, pseq, quantity) values (order_detail_seq.nextVal, temp_oseq, v_pseq, v_quantity); delete from cart where cseq=v_cseq; END LOOP; commit; END; create or replace PROCEDURE listOrderByOseq( p_oseq IN orders.oseq%type, p_cur OUT SYS_REFCURSOR ) IS BEGIN open p_cur for select * from order_view where oseq=p_oseq; END;
'학원 > Spring' 카테고리의 다른 글
2022-03-25 스프링부트 : 쇼핑몰#3 (0) 2022.03.25 2022-03-23 스프링 부트 : 쇼핑몰#1 (0) 2022.03.23 2022-03-23 스프링부트 : 프로시저를 이용한 게시판#3 (0) 2022.03.23 2022-03-22 스프링부트 : 프로시저를 이용한 게시판#2 (0) 2022.03.22 2022-03-17 스프링 부트 : 게시판 만들기 #3 게시판 (0) 2022.03.17