Study/Spring
[스프링] 프로시저 xml 호출하기
minulbora
2024. 3. 18. 12:39
del을 3개나 연달아 해야 해서 간단한 프로시저를 활용해 보기로 했다.
xml 파일
<delete id="boardDelProc" parameterType="long" statementType="CALLABLE">
BEGIN
DELETE FROM INS_COMMENT WHERE BOARD_NUM = #{value};
DELETE FROM INS_BOARD_FILE WHERE BOARD_NUM = #{value};
DELETE FROM INS_LIKE WHERE BOARD_NUM = #{value};
DELETE FROM INS_BOARD WHERE BOARD_NUM = #{value};
END;
</delete>
위부터 순서대로 진행. xml 파일에서 세미콜론( ; ) 찍어줘야 함.
FK로 마지막 board num 을 참조하고 있으므로 무결성을 유지하기 위해 (물론 disable 해두긴 함) 반드시 저 순서대로 지워야 함.
다음 java 파일
//보드-코멘트-파일-라이크
public int boardDelProc (long boardNum);
int 로 되있긴 한데 리턴을 아마 안할것임...
다음은 service 파일
//삭제 프로시저
@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)
public void boardDelProc (InsBoard insBoard) throws Exception {
//프로시저는 리턴값 없음
boardDao.boardDelProc(insBoard.getBoardNum());
FileUtil.deleteFile(UPLOAD_SAVE_DIR2+FileUtil.getFileSeparator()+
insBoard.getInsBoardFile().getFileName());
}
java에서부터 void로 고쳐야 하는데, 그 전에 오류난 걸 급하게 고치느라고 서비스단부터만 바꿔뒀나봄...
마지막 컨트롤러
@RequestMapping (value="/board/delBoard", method=RequestMethod.POST)
@ResponseBody
public Response<Object> delBoardProc (MultipartHttpServletRequest request, HttpServletResponse response){
Response<Object> ajaxRes = new Response<Object>();
long boardNum = HttpUtil.get(request, "boardNum", (long)0);
String fileName = HttpUtil.get(request, "fileName","");
String userId = HttpUtil.get(request, "userId","");
String fileExt = HttpUtil.get(request, "fileExt","");
String cookieId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME);
if(!StringUtil.isEmpty(userId)&& !StringUtil.isEmpty(fileExt)&&
!StringUtil.isEmpty(fileName)&& boardNum!=0) {
if(StringUtil.equals(userId, cookieId)) {
InsBoard insBoard = new InsBoard();
insBoard.setUserId(userId);
insBoard.setBoardNum(boardNum);
logger.debug("fileName:" +fileName);
InsBoardFile insBoardFile = new InsBoardFile();
insBoardFile.setFileName(fileName);
insBoardFile.setFileExt(fileExt);
insBoard.setInsBoardFile(insBoardFile);
// insBoard.getInsBoardFile().setFileName(fileName);
// insBoard.getInsBoardFile().setFileExt(fileExt);
try {
boardService.boardDelProc(insBoard);
ajaxRes.setResponse(0, "success");
}
catch(Exception e) {
logger.error("[BoardController] delBoardProc Exception",e);
}
}
else {
ajaxRes.setResponse(300, "no authority");
}
}
else {
ajaxRes.setResponse(400, "bad Request");
}
return ajaxRes;
}
끝!