본문 바로가기

PROJECT/게시판

[ 게시판 v.2 ] 전체적인 코드

728x90
반응형

 

내 폴더 구조는 이렇게 되어 있다.

 

파일들은 모두 아래에 공개하고 앞으로는 하나씩 해석을 기록할 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


VO 단의 파일 이름은 BoardVO.java

package com.myp.domain;

import java.util.List;

public class BoardVO {
	private int num;
	private int rownum;
	private int totalNum;
	
	// 성공 실패 메세지
	private String msg;
	
	
	/*** 게시물 ***/
	// 글 번호
	private String board_num;
	
	// 글 제목
	private String board_title;
	
	// 글쓴이
	private String board_user;
	
	// 작성일
	private String board_date;
	
	// 글 내용
	private String board_content;
	
	// 게시물 다중 삭제용
	private String board_num_List;

	// 댓글 다중 삭제용
	private String reply_num_List;
	
	// 검색용
	private String selectVal;
	private String selectKey;
	private int page;
	private int pageSize;
	private int orderby;
	private int pageIndex;
	
	
	/*** 댓 글 ***/
	// 댓글 번호
	private String reply_num;
	
	// 댓글 내용
	private String reply_content;
	
	// 댓글 작성일
	private String reply_date;

	// 댓글 글쓴이
	private String reply_user;
	
	// 댓글 리스트
	private List<BoardVO> reply_List;
	
	
	
	
	
	public String getSelectVal() {
		return selectVal;
	}

	public void setSelectVal(String selectVal) {
		this.selectVal = selectVal;
	}

	public String getSelectKey() {
		return selectKey;
	}

	public void setSelectKey(String selectKey) {
		this.selectKey = selectKey;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getBoard_num() {
		return board_num;
	}

	public void setBoard_num(String board_num) {
		this.board_num = board_num;
	}

	public String getBoard_title() {
		return board_title;
	}

	public void setBoard_title(String board_title) {
		this.board_title = board_title;
	}

	public String getBoard_user() {
		return board_user;
	}

	public void setBoard_user(String board_user) {
		this.board_user = board_user;
	}

	public String getBoard_date() {
		return board_date;
	}

	public void setBoard_date(String board_date) {
		this.board_date = board_date;
	}

	public String getBoard_content() {
		return board_content;
	}

	public void setBoard_content(String board_content) {
		this.board_content = board_content;
	}

	public String getReply_num() {
		return reply_num;
	}

	public void setReply_num(String reply_num) {
		this.reply_num = reply_num;
	}

	public String getReply_content() {
		return reply_content;
	}

	public void setReply_content(String reply_content) {
		this.reply_content = reply_content;
	}

	public String getReply_date() {
		return reply_date;
	}

	public void setReply_date(String reply_date) {
		this.reply_date = reply_date;
	}

	public String getReply_user() {
		return reply_user;
	}

	public void setReply_user(String reply_user) {
		this.reply_user = reply_user;
	}

	public int getRownum() {
		return rownum;
	}

	public void setRownum(int rownum) {
		this.rownum = rownum;
	}

	public List<BoardVO> getReply_List() {
		return reply_List;
	}

	public void setReply_List(List<BoardVO> reply_List) {
		this.reply_List = reply_List;
	}

	public int getTotalNum() {
		return totalNum;
	}

	public void setTotalNum(int totalNum) {
		this.totalNum = totalNum;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String getBoard_num_List() {
		return board_num_List;
	}

	public void setBoard_num_List(String board_num_List) {
		this.board_num_List = board_num_List;
	}

	public String getReply_num_List() {
		return reply_num_List;
	}

	public void setReply_num_List(String reply_num_List) {
		this.reply_num_List = reply_num_List;
	}

	public int getPageIndex() {
		return pageIndex;
	}

	public void setPageIndex(int pageIndex) {
		this.pageIndex = pageIndex;
	}

	public int getOrderby() {
		return orderby;
	}

	public void setOrderby(int orderby) {
		this.orderby = orderby;
	}	
}

Service 단의 파일 이름은 BoardControllService.java

package com.myp.domain;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BoardControlService {

	@Autowired
	private BoardDao dao;
	
	// 게시글 총 개수
	public BoardVO totalNum( BoardVO vo ) {
		return dao.totalNum(vo);
	}
	
	//  게시글 목록
	public List<BoardVO> boardList(  BoardVO vo ) {
		
		List<BoardVO> boardList = dao.boardList(vo);
		
		// 20글자 넘을시 절삭
		for( BoardVO vo1 : boardList) {
			if( vo1.getBoard_title() == null) {
				continue;
			}
			String title = vo1.getBoard_title();
			if(title.length()>=20) {
				vo1.setBoard_title(title.substring(0, 20)+"...");
			}
		}
		
		// 게시물 댓글 
		String boardNums = boardList.stream().map(board -> String.valueOf(board.getBoard_num())).collect(Collectors.joining(","));
		
		BoardVO paramVo = new BoardVO();
		paramVo.setBoard_num(boardNums);
		//paramMap.put("board_num", boardNums);	
		
		vo.setBoard_num(boardNums);
		if( boardNums!=null && !boardNums.equals("") && !boardNums.equals(" ")) {
			List<BoardVO> replyList = dao.boardReply(vo);
			
			Map<String, BoardVO> boardMap = boardList.stream().map(board -> {
				board.setReply_List(new ArrayList<>());
				return board;
			}).collect(Collectors.toMap(BoardVO::getBoard_num, Function.identity()));

			for( BoardVO reply : replyList ) {
				 BoardVO board = boardMap.get(reply.getBoard_num());
				if(board == null) continue;
				board.getReply_List().add(reply);
			}
		}		
		
		return  boardList;
	}
	
	//  게시글 상세보기
	public BoardVO boardDeatil( BoardVO vo ) {
		return  dao.boardDeatil(vo);
	}
	
	//  게시글 저장
	public int board_Insert( BoardVO vo ) {
		return  dao.board_Insert(vo);
	}	

	//  댓글 저장
	public int reply_Insert( BoardVO vo ) {
		return  dao.reply_Insert(vo);
	}

	//  게시글 수정
	public int board_Update( BoardVO vo ) {
		return  dao.board_Update(vo);
	}
	
	//  게시글 삭제
	public int board_Delete( BoardVO vo ) {
		return  dao.board_Delete(vo);
	}
	
	//  게시글 여러개 삭제
	public int board_List_Delete( BoardVO vo ) {
		return  dao.board_List_Delete(vo);
	}
}

Dao 단의 파일 이름은 BoardDao.java

package com.myp.domain;

import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class BoardDao {

	@Autowired
	private SqlSession sql;

	// 게시글 총 개수
	public BoardVO totalNum( BoardVO vo ) {
		return sql.selectOne("board.totalNum",vo); 
	}
	
	//  게시글 목록
	public List<BoardVO> boardList( BoardVO vo ) {
		return sql.selectList("board.boardList", vo); 
	}
	
	//  게시글 댓글 목록
	public List<BoardVO> boardReply(  BoardVO vo ) {
		return  sql.selectList("board.boardReply", vo); 
	}
	
	//  게시글 상세보기
	public BoardVO boardDeatil( BoardVO vo ) {
		return sql.selectOne("board.boardDeatil", vo); 
	}
	
	//  게시글 저장
	public int board_Insert( BoardVO vo ) {
		return  sql.insert("board.board_Insert", vo);
	}
	
	//  게시글 수정
	public int board_Update( BoardVO vo ) {
		return  sql.update("board.board_Update", vo);
	}	
	
	//  댓글 저장
	public int reply_Insert( BoardVO vo ) {
		return sql.insert("reply_Insert", vo);
	}
	
	//  게시글 삭제
	public int board_Delete( BoardVO vo ) {
		return  sql.delete("board.board_Delete", vo);
	}
	
	//  게시글 여러개 삭제
	public int board_List_Delete( BoardVO vo ) {
		int a = 0, b = 0;
		if( !vo.getBoard_num_List().isEmpty() ) {
			a = sql.delete("board.board_List_Delete", vo);
		}
		if(!vo.getReply_num_List().isEmpty()) {
			b = sql.delete("board.reply_List_Delete", vo);
		}
		return (a + b) > 0 ? 1 : 0;
	}
}

 


Controller 단의 파일 이름은 HomeController.java

package com.myp.domain;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	@Autowired
	BoardControlService boardControl;
	
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		return "boardMain";
	}
	
	
	// 게시물 목록
	@RequestMapping("/board_List")
	@ResponseBody
	public Map<String, List<BoardVO>> boardList(Locale locale, Model model, @ModelAttribute BoardVO vo ) {

		Map<String, List<BoardVO>> resultMap = new HashMap<String, List<BoardVO>>();
		
		int currentPage = vo.getPage();
		int pageSize = vo.getPageSize();
		int pageIndex= (currentPage-1)*pageSize;
		 
		vo.setPageIndex(pageIndex);
		 
		// 게시물 목록 
		List<BoardVO> boardList = boardControl.boardList(vo);

		resultMap.put("boardList", boardList);
		return resultMap;
	}
	
	
	
	// 게시물 총 개수
	@RequestMapping("/total_Num")
	@ResponseBody
	public Map<String, BoardVO> total_Num(Locale locale, Model model, @ModelAttribute BoardVO vo) {

		Map<String, BoardVO> resultMap = new HashMap<String, BoardVO>();

		// 게시물 총 개수
		vo = boardControl.totalNum(vo);
		resultMap.put("vo", vo);
		
		return resultMap;
	}
		
	
	// 게시물 상세보기
	@RequestMapping("/board_Deatil")
	@ResponseBody
	public Map<String, BoardVO> board_Deatil(Locale locale, Model model, @ModelAttribute BoardVO vo) {
		
		Map<String, BoardVO> resultMap = new HashMap<String, BoardVO>();
		vo =  boardControl.boardDeatil(vo);
		resultMap.put("vo", vo );
		
		return resultMap;
	}
	
	
	// 댓글 저장
	@RequestMapping("/reply_Insert")
	@ResponseBody
	public Map<String, BoardVO> reply_Insert(Locale locale, Model model, @ModelAttribute BoardVO vo) {
		
		Map<String, BoardVO> resultMap = new HashMap<String, BoardVO>();
		if(boardControl.reply_Insert(vo)==1) {
			vo.setMsg("댓글이 저장 되었습니다");
		}else {
			vo.setMsg("댓글 저장 실패하였습니다");
		}
		resultMap.put("vo", vo);
		return resultMap;
	}
	
	
	// 게시물 저장
	@RequestMapping("/board_Insert")
	@ResponseBody
	public Map<String, BoardVO> board_Insert(Locale locale, Model model, @ModelAttribute BoardVO vo) {
		
		Map<String, BoardVO> resultMap = new HashMap<String, BoardVO>();
		if(boardControl.board_Insert(vo)==1) {
			vo.setMsg("게시물 저장 되었습니다");
		}else {
			vo.setMsg("게시물 저장 실패하였습니다");
		}
		resultMap.put("vo", vo);
		return resultMap;
	}
	
	
	// 게시물 수정
	@RequestMapping("/board_Update")
	@ResponseBody
	public Map<String, BoardVO> board_Update(Locale locale, Model model, @ModelAttribute BoardVO vo) {
		
		Map<String, BoardVO> resultMap = new HashMap<String, BoardVO>();
		if(boardControl.board_Update(vo)==1) {
			vo.setMsg("게시물이 수정 되었습니다");
		}else {
			vo.setMsg("게시물 수정 실패하였습니다");
		}
		resultMap.put("vo", vo);
		return resultMap;
	}	
	
	
	// 게시물 삭제
	@RequestMapping("/board_Delete")
	@ResponseBody
	public Map<String, BoardVO> board_Delete(Locale locale, Model model,  @ModelAttribute BoardVO vo) {
		
		Map<String, BoardVO> resultMap = new HashMap<String, BoardVO>();
		if(boardControl.board_Delete(vo)==1) {
			vo.setMsg("게시물이 삭제되었습니다");
		}else {
			vo.setMsg("게시물 삭제 실패하였습니다");
		}
		resultMap.put("vo", vo);
		return resultMap;
	}
	
	
	// 게시물 삭제
	@RequestMapping("/board_List_Delete")
	@ResponseBody
	public Map<String, BoardVO> board_List_Delete(Locale locale, Model model,  @ModelAttribute BoardVO vo) {

		Map<String, BoardVO> resultMap = new HashMap<String, BoardVO>();
		if(boardControl.board_List_Delete(vo)==1) {
			vo.setMsg("게시물이 삭제되었습니다");
		}else {
			vo.setMsg("게시물삭제 실패하였습니다");
		}
		resultMap.put("vo", vo);
		return resultMap;
	}
}

 

728x90
반응형

'PROJECT > 게시판' 카테고리의 다른 글

[ 게시판 v.1 ] xml 설정  (0) 2021.01.06
Spring 게시판 만들기  (0) 2021.01.06