학원/Spring

2022-03-23 스프링부트 : 프로시저를 이용한 게시판#3

링규 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 파일에서 필드명을 대문자로 !! 바꿔주기