package kr.or.ddit.controller.board;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
import lombok.extern.slf4j.Slf4j;
@Controller
@RequestMapping("/crud/board")
@Slf4j
public class CrudBoardController {
@Inject
private IBoardService service;
@RequestMapping(value="/register", method = RequestMethod.GET)
public String crudRegisterForm(Model model) {
log.info("crudRegisterForm() 실행...!");
model.addAttribute("board", new Board());
return "crud/register";
}
@PostMapping(value="/register")
public String crudRegister(Board board, Model model) {
log.info("crudRegister() 실행...!");
service.register(board);
model.addAttribute("msg", "등록이 완료되었습니다.");
return "crud/success";
}
@RequestMapping(value="/list", method = RequestMethod.GET)
public String crudList(Model model) {
log.info("crudList() 실행...!");
List<Board> boardList = service.list();
model.addAttribute("boardList", boardList);
return "crud/list";
}
@RequestMapping(value="/read", method = RequestMethod.GET)
public String crudRead(int boardNo, Model model) {
log.info("crudRead() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
return "crud/read";
}
@RequestMapping(value="/modify", method = RequestMethod.GET)
public String crudModifyForm(int boardNo, Model model) {
log.info("crudModifyForm() 실행...!");
Board board = service.read(boardNo);
model.addAttribute("board", board);
model.addAttribute("status", "u"); // '수정을 진행중입니다'라는 flag값
return "crud/register";
}
@RequestMapping(value="/modify", method = RequestMethod.POST)
public String crudModify(Board board, Model model) {
log.info("crudModify() 실행...!");
service.update(board);
model.addAttribute("msg", "수정이 완료되었습니다");
return "crud/success";
}
**// 삭제하기 메소드**
@RequestMapping(value="/remove", method = RequestMethod.POST)
public String crudDelete(int boardNo, Model model){
log.info("crudDelete() 실행...!");
service.delete(boardNo);
model.addAttribute("msg", "삭제가 완료되었습니다");
return "crud/success";
}
}
interface로 먼저 IBoardSerivce를 생성하고 한다.
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.BoardMapper;
import kr.or.ddit.service.IBoardService;
import kr.or.ddit.vo.Board;
@Service
public class BoardServiceImpl implements IBoardService {
@Inject
private BoardMapper mapper;
@Override
public void register(Board board) {
mapper.create(board);
}
@Override
public List<Board> list() {
return mapper.list();
}
@Override
public Board read(int boardNo) {
return mapper.read(boardNo);
}
@Override
public int update(Board board) {
return mapper.update(board);
}
**// 삭제하기 service**
@Override
public void delete(int boardNo) {
mapper.delete(boardNo);
}
}
interface로 root-context에 설정한 대로kr.or.ddit.mapper에 만들어 준다
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Board;
public interface BoardMapper {
public void create(Board board);
public List<Board> list();
public Board read(int boardNo);
public int update(Board board);
public void delete(int boardNo);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"<https://mybatis.org/dtd/mybatis-3-mapper.dtd>">
<mapper namespace="kr.or.ddit.mapper.BoardMapper">
<!-- BoardMapper에 있는 함수명이 곧 id가 된다. -->
<insert id="create" parameterType="board" useGeneratedKeys="true">
<selectKey keyProperty="boardNo" resultType="int" order="BEFORE">
select seq_board.nextval from dual
</selectKey>
insert into board(
board_no, title, content, writer, reg_date
)values(
#{boardNo}, #{title}, #{content}, #{writer}, sysdate
)
</insert>
<select id="list" resultType="board">
select
board_no, title, content, writer, reg_date
from board
where 1=1
order by board_no desc
</select>
<select id="read" parameterType="int" resultType="board">
select
board_no, title, content, writer, reg_date
from board
where board_no = #{boardNo}
</select>
<update id="update" parameterType="board">
update board
set
title = #{title},
content = #{content}
where board_no = #{boardNo}
</update>
**<!-- 삭제하기 쿼리-->**
<delete id="delete" parameterType="int">
delete from board where board_no = #{boardNo}
</delete>
</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="<https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js>"></script>
</head>
<body>
<h2>Read</h2>
<table>
<tr>
<td>제목</td>
<td>${board.title }</td>
</tr>
<tr>
<td>작성자</td>
<td>${board.writer}</td>
</tr>
<tr>
<td>제목</td>
<td>${board.content }</td>
</tr>
<tr>
<td>제목</td>
<td>${board.regDate }</td>
</tr>
</table>
<form action="/crud/board/remove" method="post" id="delForm">
<input type="hidden" name="boardNo" value="${board.boardNo }">
</form>
<button type="button" id="btnModify">수정</button>
<button type="button" id="btnDelete">삭제</button>
<button type="button" id="btnList">목록</button>
</body>
<script>
$(function(){
var btnModify = $("#btnModify");
var btnDelete = $("#btnDelete");
var btnList = $("#btnList");
var delForm = $("#delForm");
// 수정 버튼 클릭 시 이벤트
btnModify.on("click", function(){
delForm.attr("action", "/crud/board/modify");
delForm.attr("method", "get")
delForm.submit();
});
// 삭제 버튼 클릭시 이벤트
btnDelete.on("click", function(){
if(confirm("정말로 삭제하시겠습니까?")){
delForm.submit();
}
});
// 목록 버튼 클릭시 이벤트
btnList.on("click", function(){
location.href = "/crud/board/list"
});
})
</script>
</html>