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