티스토리 뷰

컨트롤러

package cohttp://m.phwana.spring.board.controller;

import java.util.List;
import java.util.Map;

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.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import cohttp://m.phwana.spring.board.controller.dto.BoardAddRequest;
import cohttp://m.phwana.spring.board.controller.dto.BoardModifyRequest;
import cohttp://m.phwana.spring.board.domain.BoardVO;
import cohttp://m.phwana.spring.board.service.BoardService;
import cohttp://m.phwana.spring.common.FileUtil;
import cohttp://m.phwana.spring.common.PageUtil;

@Controller
public class BoardController {

private BoardService bService;
private FileUtil fileUtil;
private PageUtil pageUtil;

@Autowired
public BoardController(BoardService bService, FileUtil fileUtil, PageUtil pageUtil) {
this.bService = bService;
this.fileUtil = fileUtil;
this.pageUtil = pageUtil;
}

@GetMapping("/board/list")
public String showBoardList(Model model,
@RequestParam(value="page", defaultValue="1") int currentPage) {
try {
List<BoardVO> bList = bService.selectBoardList(currentPage);
int totalCount = bService.getTotalCount();
Map<String, Integer> pageInfo = pageUtil.generatePageInfo(totalCount, currentPage);
model.addAttribute("maxPage", pageInfo.get("maxPage"));
model.addAttribute("startNavi", pageInfo.get("startNavi"));
model.addAttribute("endNavi", pageInfo.get("endNavi"));
model.addAttribute("bList", bList);
return "board/list";
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return "common/error";
}
}

@GetMapping("/board/detail/{boardNo}")
public String showBoardDetail(@PathVariable("boardNo") int boardNo
, Model model) {
try {
BoardVO board = bService.selectOneByNo(boardNo);
model.addAttribute("board", board);
return "board/detail";
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
model.addAttribute("error", e.getMessage());
return "common/error";
}
}

@GetMapping("/board/insert")
public String showBoardInsertForm() {
return "board/insert";
}

@PostMapping("board/insert")
public String insertBoard(Model model//void->오류 안나 but String->return필수
, @ModelAttribute BoardAddRequest board
, @RequestParam("uploadFile") MultipartFile uploadFile
, HttpSession session) {
try {
//로그인한 사람만 들어올 수 있게!
if(session.getAttribute("memberId") != null) {
board.setBoardWriter((String)session.getAttribute("memberId"));
}else {
model.addAttribute("errorMsg", "로그인이 필요합니다..!");
return "common/error";
}
if(uploadFile != null && !uploadFile.getOriginalFilename().isBlank()) {
//비즈니스로직
Map<String, String> fileInfo = fileUtil.saveFile(uploadFile, session, "board");
board.setBoardFilename(fileInfo.get("bFilename"));//saveFile의 리턴부분
board.setBoardFileRename(fileInfo.get("bFileRename"));
board.setBoardFilepath(fileInfo.get("bFilepath"));
}
int result = bService.insertBoard(board);
return "redirect:/board/list";
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
model.addAttribute("errorMsg", e.getMessage());
return "common/error";
}
}

@GetMapping("/board/modify/{boardNo}")
public String showBoardModifyForm(@PathVariable int boardNo, Model model) {
try {
BoardVO board = bService.selectOneByNo(boardNo);
model.addAttribute("board", board);
return "board/modify";
} catch (Exception e) {
e.printStackTrace();
model.addAttribute("errorMsg", e.getMessage());
return "common/error";
}
}

@PostMapping("/board/modify")
public String modifyBoard(@ModelAttribute BoardModifyRequest board
, @RequestParam("reloadFile") MultipartFile reloadFile
, HttpSession session, Model model) {
try {
//if안의 if안의 if문은 따로따로 쪼개어 가독성을 높이는게 좋다~

//로그인한 사람만 수정할 수 있게(세션이용)
if(session.getAttribute("memberId") == null) {
model.addAttribute("errorMsg", "로그인이 필요합니다..!");
return "common/error";
}
String memberId = (String)session.getAttribute("memberId");

if(!memberId.equals(board.getBoardWriter())){
// boolean check = memberId.equals(board.getBoardWriter());//불린이라 삼항연산 안해도 됨
// if(check) {
model.addAttribute("errorMsg", "자신이 작성한 글만 수정할 수 있습니다.");
return "common/error";
}
if(reloadFile != null && !reloadFile.getOriginalFilename().isBlank()) {
Map<String, String> fileInfo = fileUtil.saveFile(reloadFile, session, "board");
board.setBoardFilename(fileInfo.get("bFilename"));
board.setBoardFileRename(fileInfo.get("bFileRename"));
board.setBoardFilepath(fileInfo.get("bFilepath"));
}
int result = bService.updateBoard(board);
return "redirect:/board/detail/"+board.getBoardNo();
//리다이렉트 주소는 @GetMapping("/board/detail/{boardNo}") 여길 거쳐서 간다
//BoardVO board = bService.selectOneByNo(boardNo);
//model.addAttribute("board", board); 이게 작동한다는 의미
//리다이렉트 안하면-> 내용이 없음
} catch (Exception e) {
e.printStackTrace();
model.addAttribute("errorMsg", e.getMessage());
return "common/error"; //vs 리턴 주소->jsp로 가기
}
}

@GetMapping("/board/delete/{boardNo}")
public String deleteBoard(@PathVariable int boardNo, Model model) {
try {
int result = bService.deleteBoard(boardNo);
return "redirect:/board/list";
} catch (Exception e) {
e.printStackTrace();
model.addAttribute("errorMsg", e.getMessage());
return "common/error";
}
}
}

 

매퍼

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace ="BoardMapper">
<resultMap type = "Board" id="boardResultMap">
<id  property="boardNo" column="BOARD_NO"/>
<result property="boardTitle" column="BOARD_TITLE"/>
<result property="boardContent" column="BOARD_CONTENT"/>
<result property="boardWriter" column="BOARD_WRITER"/>
<result property="boardFilename" column="BOARD_FILENAME"/>
<result property="boardFileRename" column="BOARD_FILE_RENAME"/>
<result property="boardFilepath" column="BOARD_FILEPATH"/>
<result property="boardCount" column="BOARD_COUNT"/>
<result property="boardDate" column="BOARD_DATE"/>
<result property="updateDate" column="UPDATE_DATE"/>
<result property="boardYn" column="BOARD_YN"/>
</resultMap>
<!--  <select id="selectBoardList" resultMap="boardResultMap"> -->
<select id="selectBoardList" resultType="Board">
SELECT * FROM BOARD_TBL WHERE BOARD_YN = 'Y' ORDER BY BOARD_NO DESC
</select>
<!--  <select id="selectOneByNo" resultMap="boardResultMap"> -->
<select id="selectOneByNo" resultType="Board">
SELECT * FROM BOARD_TBL WHERE BOARD_YN = 'Y' AND BOARD_NO = #{boardNo}
</select>
<insert id="insertBoard">
INSERT INTO BOARD_TBL VALUES(SEQ_BOARD_NO.NEXTVAL, #{boardTitle}, #{boardContent}, #{boardWriter}, 
#{boardFilename}, #{boardFileRename}, #{boardFilepath}, DEFAULT, DEFAULT, DEFAULT, DEFAULT)
</insert>
<update id="updateBoard">
UPDATE BOARD_TBL SET BOARD_TITLE = #{boardTitle}, BOARD_CONTENT=#{boardContent}
, BOARD_FILENAME=#{boardFilename}, BOARD_FILE_RENAME=#{boardFileRename}, BOARD_FILEPATH=#{boardFilepath}
, UPDATE_DATE = DEFAULT WHERE BOARD_NO =#{boardNo}
</update>
<update id="deleteBoard">
UPDATE BOARD_TBL SET BOARD_YN = 'N' WHERE BOARD_NO = #{boardNo}
</update>
<select id="getTotalCount" resultType="_int">
SELECT COUNT(*) FROM BOARD_TBL WHERE BOARD_YN='Y'
</select>
</mapper>

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함