ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2022-03-23 스프링부트 : 프로시저를 이용한 게시판#3
    학원/Spring 2022. 3. 23. 10:51

     

    게시물 작성/수정/삭제

     

    BoardController

     

    //게시물 수정
    @RequestMapping("/boardEditForm")
    public String board_edit_form(Model model, HttpServletRequest request) {
        String num = request.getParameter("num");
        model.addAttribute("num", num);
        return "board/boardCheckPassForm";
    }
    
    @RequestMapping("/boardEdit")
    public String board_edit(Model model, @RequestParam("num") int num, 
            @RequestParam("pass") String pass, HttpServletRequest request) {
    
        HashMap<String, Object> paramMap = new HashMap<>();
        paramMap.put("num", num);
        paramMap.put("ref_cursor", null);
        bs.getBoard(paramMap);
    
        ArrayList<HashMap<String, Object>> list 
            = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor");
    
        HashMap<String, Object> bvo = list.get(0);
        model.addAttribute("num", num);
    
        if(pass.equals(bvo.get("PASS"))) {
            return "board/boardCheckPass";
        } else {
            model.addAttribute("message", "비밀번호가 틀렸습니다.");
            return "board/boardCheckPassForm";
        }
    }
    
    @RequestMapping("/boardUpdateForm")
    public String board_update_form(@RequestParam("num") int num, Model model, 
            HttpServletRequest request) {
    
        HashMap<String, Object> paramMap = new HashMap<>();
        paramMap.put("num", num);
        paramMap.put("ref_cursor", null);
        bs.getBoard(paramMap);
        ArrayList<HashMap<String, Object>> list 
            = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor");
    
        HashMap<String, Object> bvo = list.get(0);
        BoardVO dto = new BoardVO();
        dto.setNum(Integer.parseInt(String.valueOf(bvo.get("NUM"))));
        dto.setUserid((String) bvo.get("USERID"));
        dto.setPass((String) bvo.get("PASS"));
        dto.setEmail((String) bvo.get("EMAIL"));
        dto.setImgfilename((String) bvo.get("IMGFILENAME"));
        dto.setTitle((String) bvo.get("TITLE"));
        dto.setContent((String) bvo.get("CONTENT"));
    
        model.addAttribute("num", num);
        model.addAttribute("dto", dto);
        return "board/boardEditForm";
    }
    
    @RequestMapping("/selectimg")
    public String selectimg() {
        return "board/selectimg";
    }
    
    @Autowired
    ServletContext context;
    
    @RequestMapping(value="/fileupload", method=RequestMethod.POST)
    public String fileupload(Model model, HttpServletRequest request) {
    
        String path = context.getRealPath("/upload");
    
        try {
            MultipartRequest multi = new MultipartRequest(
                    request, path, 5*1024*1024, "UTF-8", new DefaultFileRenamePolicy());
            model.addAttribute("image", multi.getFilesystemName("image"));
        } catch (Exception e) { e.printStackTrace();
        }
        return "board/completeupload";
    }
    
    @RequestMapping(value="/boardUpdate", method=RequestMethod.POST)
    public String boardUpdate(@ModelAttribute("dto") @Valid BoardVO boardvo,
            BindingResult result, @RequestParam("oldfilename") String oldfilename,
            HttpServletRequest request, Model model) {
    
        String url = "board/boardEditForm";
    
        if(result.getFieldError("pass") != null) {
            model.addAttribute("message", "비밀번호를 입력해주세요");
        } else if(result.getFieldError("title") != null) {
            model.addAttribute("message", "제목을 입력해주세요");
        } else if(result.getFieldError("content") != null) {
            model.addAttribute("message", "내용을 입력해주세요");
        } else {
            if(boardvo.getImgfilename().equals("") || boardvo.getImgfilename() == null) 
                boardvo.setImgfilename(oldfilename);
    
            HashMap<String, Object> paramMap = new HashMap<>();
            paramMap.put("num", boardvo.getNum());
            paramMap.put("userid", boardvo.getUserid());
            paramMap.put("pass", boardvo.getPass());
            paramMap.put("title", boardvo.getTitle());
            paramMap.put("email", boardvo.getEmail());
            paramMap.put("content", boardvo.getContent());
            paramMap.put("imgfilename", boardvo.getImgfilename());
    
            bs.updateBoard(paramMap);
            url = "redirect:/boardViewWithoutCount?num=" + boardvo.getNum();
        }
        return url;
    }
    
    //게시물 삭제 
    
    @RequestMapping("/boardDeleteForm")
    public String board_delete_form(@RequestParam("num") int num, Model model,
            HttpServletRequest request) {
        model.addAttribute("num", num);
        return "board/boardCheckPassForm";
    }
    
    @RequestMapping("/boardDelete")
    public String board_delete(Model model, HttpServletRequest request) {
        int num = Integer.parseInt(request.getParameter("num"));
        HashMap<String, Object> paramMap = new HashMap<>();		
        paramMap.put("num", num);
        bs.removeBoard(paramMap);
        return "redirect:/main";
    }
    
    //게시물 작성
    
    @RequestMapping("/boardWriteForm")
    public String write_form(HttpServletRequest request) {
        String url = "board/boardWriteForm";
    
        HttpSession session = request.getSession();
        if(session.getAttribute("loginUser") == null) url = "member/loginform";
    
        return url;
    }
    
    @RequestMapping("/boardWrite")
    public String board_write(@ModelAttribute("dto") @Valid BoardVO boardvo,
            BindingResult result, Model model, HttpServletRequest request) {
    
        String url = "board/boardWriteForm";
    
        if(result.getFieldError("pass") != null) 
            model.addAttribute("message", result.getFieldError("pass").getDefaultMessage());
        else if(result.getFieldError("title") != null) 
            model.addAttribute("message", result.getFieldError("title").getDefaultMessage());
        else if(result.getFieldError("content") != null) 
            model.addAttribute("message", result.getFieldError("content").getDefaultMessage());
        else { 
            HashMap<String, Object> paramMap = new HashMap<>();
            paramMap.put("userid", boardvo.getUserid());
            paramMap.put("pass", boardvo.getPass());
            paramMap.put("title", boardvo.getTitle());
            paramMap.put("email", boardvo.getEmail());
            paramMap.put("content", boardvo.getContent());
            paramMap.put("imgfilename", boardvo.getImgfilename());
    
            bs.insertBoard(paramMap);
            url = "redirect:/main";
        }
    
        return url;
    }

     

     

    BoardDao

     

    <select id="getBoard" statementType="CALLABLE" parameterType="java.util.HashMap">
        {CALL getBoard(
            #{num},
            #{ref_cursor, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=boardMap}
        )}
    </select>
    
    <update id="updateBoard" statementType="CALLABLE" parameterType="java.util.HashMap">
        {CALL updateBoard(
            #{num}, #{userid}, #{pass}, #{email}, #{title}, #{content}, #{imgfilename}		
        )}
    </update>
    
    <delete id="removeBoard" statementType="CALLABLE" parameterType="java.util.HashMap">
        {CALL removeBoard(#{num})}
    </delete>
    
    <insert id="insertBoard" statementType="CALLABLE" parameterType="java.util.HashMap">
        {CALL insertBoard(
        #{userid}, #{pass}, #{email}, #{title}, #{content}, #{imgfilename}		
        )}
    </insert>

     

     

    프로시저

     

    create or replace PROCEDURE getBoard(
        p_num IN board.num%type,
        p_cur OUT SYS_REFCURSOR
    )
    IS
    BEGIN
        open p_cur for 
            select * from board where num=p_num order by num desc;
    END;
    
    
    
    create or replace PROCEDURE updateBoard(
        p_num IN board.num%type,
        p_userid IN board.userid%type,
        p_pass IN board.pass%type,
        p_email IN board.email%type,
        p_title IN board.title%type,
        p_content IN board.content%type,
        p_imgfilename IN board.imgfilename%type
    )
    IS
    BEGIN
        update board set pass=p_pass, userid=p_userid, email=p_email, 
        title=p_title, content=p_content, imgfilename=p_imgfilename
        where num=p_num;
    END;
    
    
    create or replace PROCEDURE removeBoard(
        p_num IN board.num%type
    )
    IS
    BEGIN
        delete from board where num=p_num;
        commit;
    END;
    
    
    create or replace PROCEDURE insertBoard(
        p_userid IN board.userid%type,
        p_pass IN board.pass%type,
        p_email IN board.email%type,
        p_title IN board.title%type,
        p_content IN board.content%type,
        p_imgfilename IN board.imgfilename%type
    )
    IS
    BEGIN
        insert into board (num, pass, userid, email, title, content, imgfilename)
        values (board_seq.nextval, p_pass, p_userid, p_email, p_title, 
        p_content, p_imgfilename);
    END;

     

    + hashMap형태로 전달되는 파라미터는 jsp 파일에서 필드명을 대문자로 !! 바꿔주기

     

     

     

     

     

    댓글

Designed by Tistory.