팀프로젝트/SpringBoot

스프링 부트 팀플) 20240316 게시판 만들기_기본 토대 구축

일일일코_장민기 2024. 3. 16. 11:34
728x90

https://web-inf.tistory.com/14

 

JSTL <c:forEach> 사용법

JSTL : JSTL의 반복문인 foreach에 대해 사용방법을 포스팅하고자 합니다. foreach는 우선 일반적 프로그래밍언어에서 사용하는 for문과 동일 합니다. 반복문으로 사용이되고 주로 목록을 반복해서 출

web-inf.tistory.com

참고자료

 

오늘부터 몇 일간은 게시판을 만들 것이다.
용도는 개인 메모, 공유, 한탄 등을 할 수 있는 짬통 같은 게시판이다.
그냥 자기 쓰고 싶은 걸 쓸 수 있는 곳이라고 보면 된다.

우선
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>

게시판 목록
게시판 내용

 

앞으로 구현할 기능

글 쓰기
글 수정하기
글 삭제하기
글 연결
조회수 증가
추천수 증감

페이지네이션
글 내용 다양한 것 입력할 수 있도록 만들기(입력기)
게시판, 게시판 글 꾸미기

추후 추가...