package com.study.springboot;
import com.study.springboot.dao.IBoardDAO;
import com.study.springboot.dao.IReplyDAO;
import com.study.springboot.dto.BoardDTO;
import com.study.springboot.dto.ReplyDTO;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class MyController {
@Autowired
IBoardDAO boardDao;
@Autowired
IReplyDAO replyDao;
@RequestMapping("/")
//@ResponseBody
public String root() {
//return "root함수 호출";
return "redirect:listForm";
}
@RequestMapping("/listForm")
public String listForm(Model model) {
List<BoardDTO> list = boardDao.list();
model.addAttribute("list", list);
System.out.println(list);
return "listForm";
}
@RequestMapping("/writeForm")
public String wirteForm() {
return "writeForm";
}
@RequestMapping("/writeAction")
@ResponseBody
public String wirteAction(@RequestParam("board_name") String board_name,
@RequestParam("board_title") String board_title,
@RequestParam("board_content") String board_content,
HttpServletRequest request) {
int result = boardDao.write(board_name, board_title, board_content);
if(result == 1) {
System.out.println("글쓰기 성공!");
// request.getSession().setAttribute("alert_message", "글쓰기 성공!");
// return "redirect:listForm";
return"<script>alert('글쓰기 성공!'); location.href='/listForm';</script>";
} else {
System.out.println("글쓰기 실패!");
// request.getSession().setAttribute("alert_message", "글쓰기 실패!");
// return "redirect:writeForm";
return"<script>alert('글쓰기 실패!')</script>; location.href='/writeForm';</script>";
}
}
@RequestMapping("/contentForm")
public String contentForm(@RequestParam("board_idx") String board_idx,
Model model) {
//조회수 증가
boardDao.hit(board_idx);
//게시글 보기
BoardDTO dto = boardDao.viewDto(board_idx);
System.out.println(dto);
model.addAttribute("dto", dto);
//댓글 리스트 가져오기
List<ReplyDTO> reply_list = replyDao.reply_list(board_idx);
model.addAttribute("reply_list", reply_list);
return "contentForm";
}
@RequestMapping("/updateAction")
@ResponseBody
public String updateAction(@RequestParam("board_idx") String board_idx,
@RequestParam("board_name") String board_name,
@RequestParam("board_title") String board_title,
@RequestParam("board_content") String board_content,
HttpServletRequest request,
Model model) {
int result = boardDao.updateDto(board_idx, board_name, board_title, board_content);
if(result == 1) {
System.out.println("글수정 성공!");
// request.getSession().setAttribute("alert_message", "글수정 성공!");
// return "redirect:listForm";
return"<script>alert('글수정 성공!'); location.href='/listForm';</script>";
} else {
System.out.println("글수정 실패!");
// request.getSession().setAttribute("alert_message", "글수정 실패!");
// return "redirect:contentForm?board_idx=" + board_idx;
return"<script>alert('글수정 실패!'); location.href='/contentForm?board_idx=" + board_idx + "';</script>";
}
}
@RequestMapping("/deleteAction")
@ResponseBody
public String deleteAction(@RequestParam("board_idx") String board_idx,
HttpServletRequest request) {
int result = boardDao.deleteDto(board_idx);
if(result == 1) {
System.out.println("글삭제 성공!");
// request.getSession().setAttribute("alert_message", "글삭제 성공!");
// return "redirect:listForm";
return"<script>alert('글삭제 성공!'); location.href='/listForm';</script>";
} else {
System.out.println("글삭제 실패!");
// request.getSession().setAttribute("alert_message", "글삭제 실패!");
// return "redirect:contentForm?board_idx=" + board_idx;
return"<script>alert('글삭제 실패!'); location.href='/contentForm?board_idx=" + board_idx + "';</script>";
}
}
@RequestMapping("/writeReplyAction")
@ResponseBody
public String wirteReplyAction(@RequestParam("reply_name") String reply_name,
@RequestParam("reply_content") String reply_content,
@RequestParam("reply_board_index") String reply_board_index,
HttpServletRequest request) {
int result = replyDao.reply_write(reply_name, reply_content, reply_board_index);
if(result == 1) {
System.out.println("댓글달기 성공!");
// request.getSession().setAttribute("alert_message", "글쓰기 성공!");
// return "redirect:listForm";
return"<script>alert('댓글달기 성공!'); location.href='/contentForm?board_idx=" + reply_board_index + "';</script>";
} else {
System.out.println("댓글달기 실패!");
// request.getSession().setAttribute("alert_message", "글쓰기 실패!");
// return "redirect:writeForm";
return"<script>alert('댓글달기 실패!'); location.href='/contentForm?board_idx=" + reply_board_index + "';</script>";
}
}
@RequestMapping("/deleteReplyAction")
@ResponseBody
public String deleteReplyAction(@RequestParam("reply_idx") String reply_idx,
@RequestParam("board_idx") String board_idx,
HttpServletRequest request) {
int result = replyDao.reply_deleteDto(reply_idx);
if(result == 1) {
System.out.println("댓글삭제 성공!");
// request.getSession().setAttribute("alert_message", "글삭제 성공!");
// return "redirect:listForm";
return"<script>alert('댓글삭제 성공!'); location.href='/contentForm?board_idx=" + board_idx + "';</script>";
} else {
System.out.println("댓글삭제 실패!");
// request.getSession().setAttribute("alert_message", "글삭제 실패!");
// return "redirect:contentForm?board_idx=" + board_idx;
return"<script>alert('댓글삭제 실패!'); location.href='/contentForm?board_idx=" + board_idx + "';</script>";
}
}
}
package com.study.springboot.dao;
import com.study.springboot.dto.BoardDTO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface IBoardDAO {
public List<BoardDTO> list();
public int write(String board_name, String board_title, String board_content);
public BoardDTO viewDto(String board_idx);
public int updateDto(String board_idx, String board_name, String board_title, String board_content);
public int deleteDto(String board_idx);
public int hit(String board_idx);
}
package com.study.springboot.dao;
import com.study.springboot.dto.ReplyDTO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface IReplyDAO {
public List<ReplyDTO> reply_list(String reply_index);
public int reply_write(String reply_name, String reply_content, String reply_index);
public int reply_deleteDto(String reply_idx);
}
package com.study.springboot.dto;
import lombok.Data;
import java.util.Date;
@Data
public class BoardDTO {
private int board_idx;
private String board_name;
private String board_title;
private String board_content;
private Date board_date;
private int board_hit;
public BoardDTO(int board_idx, String board_name, String board_title, String board_content, Date board_date, int board_hit) {
this.board_idx = board_idx;
this.board_name = board_name;
this.board_title = board_title;
this.board_content = board_content;
this.board_date = board_date;
this.board_hit = board_hit;
}
}
package com.study.springboot.dto;
import lombok.Data;
import java.util.Date;
@Data
public class ReplyDTO {
private int reply_idx;
private String reply_name;
private String reply_content;
private Date reply_date;
private int reply_board_idx;
public ReplyDTO(int reply_idx, String reply_name, String reply_content, Date reply_date, int reply_board_idx) {
this.reply_idx = reply_idx;
this.reply_name = reply_name;
this.reply_content = reply_content;
this.reply_date = reply_date;
this.reply_board_idx = reply_board_idx;
}
}
<?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="com.study.springboot.dao.IBoardDAO">
<select id="list" resultType="com.study.springboot.dto.BoardDTO">
SELECT * FROM BOARD ORDER BY BOARD_DATE DESC
</select>
<insert id="write">
insert into board (board_idx,
board_name,
board_title,
board_content,
board_date)
values (board_seq.nextval,
#{param1},
#{param2},
#{param3},
sysdate)
</insert>
<select id="viewDto" resultType="com.study.springboot.dto.BoardDTO">
SELECT * FROM BOARD WHERE BOARD_IDX = #{param1}
</select>
<update id="updateDto">
UPDATE BOARD SET board_name = #{param2},
board_title = #{param3},
board_content = #{param4}
WHERE board_idx = #{param1}
</update>
<delete id="deleteDto">
DELETE FROM BOARD WHERE BOARD_IDX = #{param1}
</delete>
<update id="hit">
UPDATE BOARD SET BOARD_HIT = BOARD_HIT + 1
WHERE BOARD_IDX = #{param1}
</update>
</mapper>
<?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="com.study.springboot.dao.IReplyDAO">
<select id="reply_list" resultType="com.study.springboot.dto.ReplyDTO">
SELECT * FROM REPLY
WHERE REPLY_BOARD_IDX=#{param1}
ORDER BY REPLY_DATE DESC
</select>
<insert id="reply_write">
INSERT INTO REPLY (reply_idx,
reply_name,
reply_content,
reply_date,
reply_board_idx)
VALUES (reply_board_seq.nextval,
#{param1},
#{param2},
sysdate,
#{param3})
</insert>
<delete id="reply_deleteDto">
DELETE FROM REPLY WHERE REPLY_IDX = #{param1}
</delete>
</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="jakarta.tags.fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 내용</title>
<%-- <script>--%>
<%-- let isEmpty = function(value) {--%>
<%-- if(value == "" || value == null || value == undefined ||--%>
<%-- (value != null && typeof value == "object" && !Object.keys(value).length)) {--%>
<%-- return true;--%>
<%-- } else {--%>
<%-- return false;--%>
<%-- }--%>
<%-- };--%>
<%-- let alert_message = "${alert_message}";--%>
<%-- if(!isEmpty(alert_message)){--%>
<%-- alert(alert_message);--%>
<%-- }--%>
<%-- </script>--%>
<style>
* {
margin: 0 auto;
padding: 0 auto;
overflow: hidden;
}
td, h2 {
text-align: center;
}
</style>
</head>
<body>
<h2>글 내용</h2>
<form action="updateAction" method="post">
<table width="500" cellpadding="0" cellspacing="0" border="1">
<input type="hidden" name="board_idx" value="${dto.board_idx}">
<tr>
<td>번호</td>
<td>${dto.board_idx}</td>
</tr>
<tr>
<td>조회수</td>
<td>${dto.board_hit}</td>
</tr>
<tr>
<td>이름</td>
<td>
<input type="text" name="board_name" value="${dto.board_name}" size="50">
</td>
</tr>
<tr>
<td>제목</td>
<td>
<input type="text" name="board_title" value="${dto.board_title}" size="50">
</td>
</tr>
<tr>
<td>내용</td>
<td>
<textarea rows="10" cols="50" name="board_content">${dto.board_content}</textarea>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="수정하기">
<a href="listForm"><input type="button" value="목록보기"></a>
<a href="deleteAction?board_idx=${dto.board_idx}"><input type="button" value="삭제하기"></a>
</td>
</tr>
</table>
</form>
<br>
<form action="writeReplyAction" method="post">
<table width="500" cellpadding="0" cellspacing="0" border="1">
<tr>
<td colspan="2">
<input type="hidden" name="reply_board_index" value="${dto.board_idx}">
<label>댓글</label><textarea rows="2" cols="50" name="reply_content"></textarea><br>
<label>별명</label><input type="text" name="reply_name" value=""><br>
<input type="submit" value="댓글달기">
</td>
</tr>
</table>
</form>
<br>
<table width="500" cellpadding="0" cellspacing="0" border="1">
<tr>
<th>별명</th>
<th>내용</th>
<th>날짜</th>
<th>삭제</th>
</tr>
<c:forEach var="reply_dto" items="${reply_list}">
<tr>
<td>${reply_dto.reply_name}</td>
<td>${reply_dto.reply_content}</td>
<td>
<c:set var="dateVar" value="${reply_dto.reply_date}" />
<fmt:formatDate value="${dateVar}" pattern="yyyy-MM-dd HH:mm:ss" />
</td>
<td>
<a href="deleteReplyAction?reply_idx=${reply_dto.reply_idx}&board_idx=${dto.board_idx}"><button>삭제</button></a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="jakarta.tags.fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판 목록보기</title>
<%-- <script>--%>
<%-- let isEmpty = function(value) {--%>
<%-- if(value == "" || value == null || value == undefined ||--%>
<%-- (value != null && typeof value == "object" && !Object.keys(value).length)) {--%>
<%-- return true;--%>
<%-- } else {--%>
<%-- return false;--%>
<%-- }--%>
<%-- };--%>
<%-- let alert_message = "${alert_message}";--%>
<%-- if(!isEmpty(alert_message)){--%>
<%-- alert(alert_message);--%>
<%-- }--%>
<%-- </script>--%>
<style>
* {
margin: 0 auto;
padding: 0 auto;
overflow: hidden;
}
td, h2 {
text-align: center;
}
</style>
</head>
<body>
<h2>게시판 글목록</h2>
<table width="500" cellpadding="0" cellspacing="0" border="1">
<tr>
<th>번호</th>
<th>이름</th>
<th>제목</th>
<th>날짜</th>
<th>조회수</th>
</tr>
<c:forEach var="dto" items="${list}">
<tr>
<td>${dto.board_idx}</td>
<td>${dto.board_name}</td>
<td>
<a href="contentForm?board_idx=${dto.board_idx}">${dto.board_title}</a>
</td>
<td>
<c:set var="dateVar" value="${dto.board_date}" />
<fmt:formatDate value="${dateVar}" pattern="yyyy-MM-dd HH:mm:ss" />
</td>
<td>${dto.board_hit}</td>
</tr>
</c:forEach>
<tr>
<td colspan="5"><a href="writeForm">글작성</a></td>
</tr>
</table>
<script>
/* 웹브라우저 back키 눌렀을 때, 페이지 재로딩 */
window.onpageshow = function(event) {
if(event.persisted) {
document.location.reload();
}
}
</script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글쓰기</title>
<%-- <script>--%>
<%-- let isEmpty = function(value) {--%>
<%-- if(value == "" || value == null || value == undefined ||--%>
<%-- (value != null && typeof value == "object" && !Object.keys(value).length)) {--%>
<%-- return true;--%>
<%-- } else {--%>
<%-- return false;--%>
<%-- }--%>
<%-- };--%>
<%-- let alert_message = "${alert_message}";--%>
<%-- if(!isEmpty(alert_message)){--%>
<%-- alert(alert_message);--%>
<%-- }--%>
<%-- </script>--%>
<style>
* {
margin: 0 auto;
padding: 0 auto;
overflow: hidden;
}
td, h2 {
text-align: center;
}
</style>
</head>
<body>
<h2>글쓰기</h2>
<form action="writeAction" method="post">
<table width="500" cellpadding="0" cellspacing="0" border="1">
<tr>
<td>이름</td>
<td>
<input type="text" name="board_name" value="" size="50">
</td>
</tr>
<tr>
<td>제목</td>
<td>
<input type="text" name="board_title" value="" size="50">
</td>
</tr>
<tr>
<td>내용</td>
<td>
<textarea rows="10" cols="50" name="board_content"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="글쓰기">
<a href="listForm"><input type="button" value="목록보기"></a>
</td>
</tr>
</table>
</form>
</body>
</html>
db.sql(text)(아래)
create table board(
board_idx number(4) primary key,
board_name varchar2(20),
board_title varchar2(100),
board_content varchar2(300),
board_date date default sysdate,
board_hit number(4) default 0
);
create SEQUENCE board_seq;
insert into board (board_idx,board_name, board_title, board_content, board_date)
values (board_seq.nextval, '사임당', '글 제목3', '글 내용3', sysdate);
select * from board;
create table reply(
reply_idx number(4) primary key,
reply_name varchar2(20),
reply_content varchar2(300),
reply_date date default sysdate,
reply_board_idx number(4)
);
create SEQUENCE reply_board_seq;
insert into reply (reply_idx,reply_name, reply_content, reply_date, reply_board_idx)
values (reply_board_seq.nextval, '심봉사', '댓글 제목3', sysdate, 3);
select * from reply;
commit;