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 |