팀프로젝트/SpringBoot
스프링 부트 팀플) 20240316 게시판 만들기_기본 토대 구축
일일일코_장민기
2024. 3. 16. 11:34
728x90
https://web-inf.tistory.com/14
참고자료
오늘부터 몇 일간은 게시판을 만들 것이다.
용도는 개인 메모, 공유, 한탄 등을 할 수 있는 짬통 같은 게시판이다.
그냥 자기 쓰고 싶은 걸 쓸 수 있는 곳이라고 보면 된다.
우선
1. DB 만들
--디버그 게시판DB 생성
create table debugBoardDB (
BOARDNUM Number(10) primary key,
NICKNAME VARCHAR2(20) NOT NULL,
PASSWORD Varchar2(20),
TITLE VARCHAR2(200) NOT NULL,
CATEGORY VARCHAR2(20) NOT NULL,
CONTENT VARCHAR2(2000) NOT NULL,
POSTDATE DATE DEFAULT SYSDATE NOT NULL,
EDITTEDDATE DATE,
VIEWCOUNT NUMBER(20) DEFAULT 0 NOT NULL,
RECOMMENDNUM NUMBER(20) DEFAULT 0 NOT NULL
);
--디버그 게시판용 시퀸스
CREATE SEQUENCE debugBoard_seq
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 99999
NOCYCLE
;
-- 디버그 게시판용 트리거 생성
CREATE OR REPLACE TRIGGER trg_post_debugBoardnum
BEFORE INSERT ON debugBoarddb
FOR EACH ROW
BEGIN
SELECT debugBoard_seq.NEXTVAL INTO :NEW.BOARDNUM FROM dual;
END;
/
SQL의 단점은 시퀸스와 트리거를 하나씩 실행해줘야 제대로 적용된다는 점이다.
아무튼 상당히 많이 엎었다가 다시 만들었다.
게시판 작업하는 동안 앞으로 더 많이 엎을지도...
2. DTO 만들기
package com.moonBam.dto;
import java.util.Date;
import org.apache.ibatis.type.Alias;
@Alias("DebugBoardDTO")
public class DebugBoardDTO {
private int boardNum; //글 번호 //시퀸스 사용
private String nickname; //작성자 //로그인 시 닉네임 | 직접 입력 | 자동입력
private String password; //글 비밀번호
private String title; //글 제목
private String category; //글 카테고리
private String content; //글 내용
private Date postDate; //작성 날짜 //글 작성 시 sysDate
private Date edittedDate; //수정 날짜 //글 작성 시 postDate와 동일값
private int viewCount; //조회수 //default 0
private int recommendNum; //추천수 //default 0
//일부 생략
}
3. Mapper만들기
기존에 쓰던 Mapper에 sql만 더 집어넣었다.
<!-- 게시판 목록 출력 -->
<select id="viewDBoardList" resultType="DebugBoardDTO">
SELECT
boardNum, nickname, title, category, edittedDate, viewCount, recommendNum
FROM
debugBoardDB
</select>
<!-- 게시판 글 출력 -->
<select id="viewDBoardContent" resultType="DebugBoardDTO" parameterType="int">
SELECT
nickname, title, category, content, edittedDate, viewCount, recommendNum
FROM
debugBoardDB
WHERE
boardNum = #{boardNum}
</select>
<!-- 게시판글 입력-->
<insert id="insertDBoard" parameterType="DebugBoardDTO">
INSERT INTO debugBoardDB (
nickname, password, title, category, content,
postDate, edittedDate)
VALUES (
#{nickname}, #{password}, #{title}, #{category}, #{content},
#{postDate}, #{postDate})
</insert>
<!-- 게시판글 수정 --><!-- ***************** -->
<update id="updateDBoard" parameterType="DebugBoardDTO">
UPDATE debugBoardDB
SET
password = #{password},
title = #{title},
category = #{category},
content = #{content},
edittedDate = #{edittedDate},
WHERE boardNum = #{boardNum}
</update>
<!-- 게시판글 삭제 -->
<delete id="deleteDBoard" parameterType="int">
DELETE FROM debugBoardDB
WHERE BOARDNUM = #{boardNum}
</delete>
<!-- 게시판글 조회수 수정 --><!-- ***************** -->
<update id="updateDBoardViewCount" parameterType="DebugBoardDTO">
UPDATE debugBoardDB
SET
viewCount = #{viewCount},
WHERE boardNum = #{boardNum}
</update>
<!-- 게시판글 추천수 수정 --><!-- ***************** -->
<update id="updateDBoardRecommendNum" parameterType="DebugBoardDTO">
UPDATE debugBoardDB
SET
recommendNum = #{recommendNum},
WHERE boardNum = #{boardNum}
</update>
일단 예상되는 기본 기능만 넣어두었다.
4. 기본 컨트롤러, 서비스, DAO 만들기
package com.moonBam.controller.member;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
import com.moonBam.dto.DebugBoardDTO;
import com.moonBam.service.member.DebugBoardService;
@Controller
public class DebugBoardController {
@Autowired
DebugBoardService serv;
/*
* viewDBoardList ? 에이젝스?
* viewDBoardContent
* insertDBoard
* updateDBoard 에이젝스
* deleteDBoard 에이젝스
* updateDBoardViewCount 보이드
* updateDBoardViewCount 에이젝스
*/
@GetMapping("/viewDBoardList")
public ModelAndView viewDBoardList() {
List<DebugBoardDTO> list = serv.viewDBoardList();
ModelAndView mav = new ModelAndView();
mav.addObject("list", list);
mav.setViewName("member/Test/viewDBoardList");
return mav;
}
@GetMapping("/viewDBoardContent")
public ModelAndView viewDBoardContent(int boardNum) {
DebugBoardDTO dto = serv.viewDBoardContent(boardNum);
//updateDBoardViewCount(boardNum, dto.getViewCount()+1);
ModelAndView mav = new ModelAndView();
mav.addObject("dto", dto);
mav.setViewName("member/Test/viewDBoardContent");
return mav;
}
public void updateDBoardViewCount(int boardNum, int viewCount) {
DebugBoardDTO dto = new DebugBoardDTO();
dto.setBoardNum(boardNum);
dto.setViewCount(viewCount);
int result = serv.updateDBoardViewCount(dto);
if(result>0) {
System.out.println("조회수 함수 성공");
}
}
}
package com.moonBam.service.member;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.moonBam.dao.member.DebugBoardDAO;
import com.moonBam.dto.DebugBoardDTO;
@Service
public class DebugBoardService {
@Autowired
DebugBoardDAO dao;
public List<DebugBoardDTO> viewDBoardList() {
List<DebugBoardDTO> list = dao.viewDBoardList();
return list;
}
public DebugBoardDTO viewDBoardContent(int boardNum) {
DebugBoardDTO dto = dao.viewDBoardContent(boardNum);
return dto;
}
public int updateDBoardViewCount(DebugBoardDTO dto) {
int result = dao.updateDBoardViewCount(dto);
return result;
}
}
package com.moonBam.dao.member;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.moonBam.dto.DebugBoardDTO;
@Repository
public class DebugBoardDAO {
@Autowired
SqlSessionTemplate session;
public List<DebugBoardDTO> viewDBoardList() {
List<DebugBoardDTO> list = session.selectList("com.config.MemberMapper.viewDBoardList");
return list;
}
public DebugBoardDTO viewDBoardContent(int boardNum) {
DebugBoardDTO dto = session.selectOne("com.config.MemberMapper.viewDBoardContent", boardNum);
return dto;
}
public int updateDBoardViewCount(DebugBoardDTO dto) {
int result = session.update("com.config.MemberMapper.viewDBoardContent", dto);
return result;
}
}
아직은 글과 세부 글 불러오기만 구현했다.
조회수 늘리기는 금방 끝나기까 뭐...
5. JSP 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<!-- 게시판 -->
<head>
<meta charset="UTF-8">
<title>글 목록</title>
<link rel="stylesheet" type="text/css" href="<c:url value='resources/css/member/unfound.css'/>">
</head>
<body>
<c:forEach var="db" items="${list}" varStatus="vs">
글번호: <c:out value="${db.boardNum}"/>
카테고리: <c:out value="${db.category}"/>
제목: <c:out value="${db.title}"/>
닉네임: <c:out value="${db.nickname}"/>
작성 날짜: <c:out value="${db.edittedDate}"/>
조회수: <c:out value="${db.viewCount}"/>
추천수: <c:out value="${db.recommendNum}"/><br>
</c:forEach>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<!-- 글 목록 -->
<head>
<meta charset="UTF-8">
<title>글</title>
<link rel="stylesheet" type="text/css" href="<c:url value='resources/css/member/unfound.css'/>">
</head>
<body>
작성자: ${dto.nickname}
제목: ${dto.title}
카테고리: ${dto.category}
작성 날짜: ${dto.edittedDate}
조회수: ${dto.viewCount}
추천수: ${dto.recommendNum}
내용: ${dto.content}
</body>
</html>
앞으로 구현할 기능
글 쓰기
글 수정하기
글 삭제하기
글 연결
조회수 증가
추천수 증감
페이지네이션
글 내용 다양한 것 입력할 수 있도록 만들기(입력기)
게시판, 게시판 글 꾸미기
추후 추가...