Published on August 07, 2021 by Eunbi.N
Spring BoardController Pagination
package com.kh.sharethevision.board.controller;
@Controller
public class BoardController {
@Autowired
private BoardService bService;
@RequestMapping("blist.bo")
public ModelAndView boardList(@RequestParam(value="page",required=false)
Integer page, ModelAndView mv) {
int currentPage=1;
if(page !=null) {
currentPage = page;
}
int listCount = bService.getListCount();
PageInfo pi = Pagination.getPageInfo(currentPage,listCount);
ArrayList<Board> list = bService.selectList(pi);
if(list!=null) {
mv.addObject("list",list).addObject("pi",pi);
mv.setViewName("boardListView");
}else {
throw new BoardException("게시물 조회 실패");
}
return mv;
}
@RequestMapping("binsertView.bo")
public String boardInsertForm() {
return "boardInsertForm";
}
@RequestMapping("binsert.bo")
public String insertBoard(@ModelAttribute Board b,
@RequestParam("uploadFile") MultipartFile uploadFile,
HttpServletRequest request) {
if(!uploadFile.getOriginalFilename().equals("")) {
String renameFileName = saveFile(uploadFile,request);
if(renameFileName!=null) {
b.setOriginalFileName(uploadFile.getOriginalFilename());
b.setRenameFileName(renameFileName);
}
}
int result = bService.insertBoard(b);
if(result>0) {
return "redirect:blist.bo";
}else {
throw new BoardException("게시글 등록 실패");
}
}
public String saveFile(MultipartFile file, HttpServletRequest request) {
String root = request.getSession().getServletContext().getRealPath("resources");
String savePath = root + "\\buploadFiles";
File folder = new File(savePath);
if(!folder.exists()) {
folder.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String originalFileName = file.getOriginalFilename();
String renameFileName = sdf.format(new Date(System.currentTimeMillis()))+"."+
originalFileName.substring(originalFileName.lastIndexOf(".")+1);
String renamePath = folder + "\\" + renameFileName;
try {
file.transferTo(new File(renamePath));
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return renameFileName;
}
@RequestMapping("bdetail.bo")
public ModelAndView bdetail(@RequestParam("boardId") int boardId,
@RequestParam("page") Integer page,
ModelAndView mv) {
Board b = bService.selectBoard(boardId,true);
if(b!=null) {
mv.addObject("b",b);
mv.addObject("page",page);
mv.setViewName("boardDetailView");
}else {
throw new BoardException("게시글 상세보기 실패");
}
return mv;
}
@RequestMapping("bupView.bo")
public String boardUpdateForm(@RequestParam("boardId") int bId,
@RequestParam("page") int page,
Model model) {
Board board = bService.selectBoard(bId, false);
model.addAttribute("board",board).addAttribute("page",page);
return "boardUpdateForm";
}
@RequestMapping("bupdate.bo")
public ModelAndView updateBoard(@ModelAttribute Board b,
@RequestParam("page") int page,
@RequestParam("reloadFile") MultipartFile reloadFile,
HttpServletRequest request,
ModelAndView mv) {
if(reloadFile!=null && !reloadFile.isEmpty()) {
if(b.getRenameFileName()!=null) {
String root = request.getSession().getServletContext().getRealPath("resources");
String savePath = root + "\\buploadFiles";
File f = new File(savePath+"\\"+ b.getRenameFileName());
if(f.exists()) {
f.delete();
}
}
String renameFileName = saveFile(reloadFile,request);
if(renameFileName!=null) {
b.setOriginalFileName(reloadFile.getOriginalFilename());
b.setRenameFileName(renameFileName);
}
}
int result = bService.updateBoard(b);
if(result>0) {
Board board = bService.selectBoard(b.getBoardId(), false);
mv.addObject("b",b);
mv.addObject("page",page);
mv.setViewName("boardDetailView");
}else {
throw new BoardException("게시글 수정 실패");
}
return mv;
}
@RequestMapping("bdelete.bo")
public String deleteBoard(@RequestParam("boardId") int boardId, HttpServletRequest request) {
Board board = bService.selectBoard(boardId, false);
if(board.getOriginalFileName()!=null) {
deleteFile(request,board);
}
int result = bService.deleteBoard(boardId);
if(result>0) {
return "redirect:blist.bo";
}else {
throw new BoardException("게시물 삭제 실패");
}
}
public void deleteFile(HttpServletRequest request, Board board) {
String root = request.getSession().getServletContext().getRealPath("resources");
String savePath = root + "\\buploadFiles";
File f = new File(savePath +"\\"+ board.getRenameFileName());
if(f.exists()) {
f.delete();
}
}
@RequestMapping("addReply.bo")
@ResponseBody
public String insertReply(@ModelAttribute Reply r,
HttpSession session ) {
Member loginUser = (Member)session.getAttribute("loginUser");
String replyWriter = loginUser.getId();
r.setReplyWriter(replyWriter);
int result = bService.insertReply(r);
if(result>0) {
return "success";
}else {
throw new BoardException("댓글 등록 실패");
}
}
@RequestMapping(value="rList.bo")
@ResponseBody
public void listReply(@RequestParam("boardId") int boardId, HttpServletResponse response) {
ArrayList<Reply> rList = bService.replyList(boardId);
GsonBuilder gb = new GsonBuilder().setDateFormat("yyyy-MM-dd");
Gson gson = gb.create();
try {
response.setContentType("application/json; charset=UTF-8");
gson.toJson(rList, response.getWriter());
} catch (JsonIOException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@RequestMapping("topList.bo")
public void selectTopList(HttpServletResponse response) {
ArrayList<Board> list = bService.selectTopList();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
response.setContentType("application/json; charset=UTF-8");
try {
gson.toJson(list, response.getWriter());
} catch (JsonIOException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.kh.sharethevision.common;
public class Pagination {
public static PageInfo getPageInfo(int currentPage, int listCount) {
int pageLimit=10;
int boardLimit=5;
int maxPage= (int)Math.ceil((double)listCount/boardLimit);
int startPage= (currentPage-1)/pageLimit*pageLimit+1;
int endPage= startPage + pageLimit -1;
if(endPage>maxPage) {
endPage=maxPage;
}
PageInfo pi = new PageInfo(currentPage, listCount, pageLimit, maxPage, startPage, endPage, boardLimit);
return pi;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="boardMapper">
<select id="listCount" resultType="_int">
select count(*) from board where board_status='Y'
</select>
<select id="selectList" resultMap="boardResultSet">
select board_id, board_title, board_writer, nickname, board_content,
original_filename, rename_filename, board_count, board_create_date, board_modify_date, board_status
from board
join member on (id=board_writer)
where board_status='Y'
order by board_id desc
</select>
<resultMap id="boardResultSet" type="Board">
<id column="BOARD_ID" property="boardId"/>
<result column="BOARD_TITLE" property="boardTitle"/>
<result column="BOARD_WRITER" property="boardWriter"/>
<result column="NICKNAME" property="nickName"/>
<result column="BOARD_CONTENT" property="boardContent"/>
<result column="ORIGINAL_FILENAME" property="originalFileName"/>
<result column="RENAME_FILENAME" property="renameFileName"/>
<result column="BOARD_COUNT" property="boardCount"/>
<result column="BOARD_CREATE_DATE" property="boardCreateDate"/>
<result column="BOARD_MODIFY_DATE" property="boardModifyDate"/>
<result column="BOARD_STATUS" property="boardStatus"/>
</resultMap>
<insert id="insertBoard">
insert into board
values(seq_bid.nextval, #{boardTitle}, #{boardWriter}, #{boardContent},
#{originalFileName}, #{renameFileName}, default, sysdate, sysdate, default)
</insert>
<update id="addReadCount">
update board set board_count=board_count+1 where board_id=#{boardId}
</update>
<select id="selectBoard" resultMap="boardResultSet">
select board_id, board_title, board_writer, nickname, board_content,
original_filename, rename_filename, board_count, board_create_date, board_modify_date, board_status
from board
join member on (id=board_writer)
where board_id=#{boardId} and board_status='Y'
</select>
<update id="updateBoard">
update board
set board_title=#{boardTitle}, board_content=#{boardContent}, board_modify_date=sysdate,
<if test="originalFileName !=null">
original_filename=#{originalFileName},
</if>
rename_filename=#{renameFileName}
where board_id=#{boardId}
</update>
<update id="deleteBoard">
update board set board_status='N' where board_id=#{boardId}
</update>
<insert id="insertReply">
insert into reply
values(seq_rid.nextval, #{replyContent}, #{refBoardId}, #{replyWriter}, sysdate, sysdate, default)
</insert>
<select id="selectReplyList" resultMap="ReplyResultSet">
select *
from reply
where REF_BOARD_ID= #{boardId} and reply_status='Y'
order by reply_id desc
</select>
<resultMap type="Reply" id="ReplyResultSet">
<id column="REPLY_ID" property="replyId"/>
<result column="REPLY_CONTENT" property="replyContent"/>
<result column="REF_BOARD_ID" property="refBoardId"/>
<result column="REPLY_WRITER" property="replyWriter"/>
<result column="REPLY_CREATE_DATE" property="replyCreateDate"/>
<result column="REPLY_MODIFY_DATE" property="replyModifyDate"/>
<result column="REPLY_STATUS" property="replyStatus"/>
</resultMap>
<!-- 매퍼에서는 부등호가 괄호로 인식됨 -> 태그 인식 X : <![CDATA[ ]]> ! C DATA -->
<select id="selectTopList" resultMap="boardResultSet">
<![CDATA[
with topN as( select *
from board
where board_status='Y'
order by board_count desc )
select *
from topN
where rownum <= 5
]]>
</select>
</mapper>