

<%@page import="com.lgdx.entity.Board"%>
<%@page import="java.util.ArrayList"%>
<%@ 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>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Spring MVC 02</h2>
<div class="panel panel-warning">
<div class="panel-heading">Board List Page</div>
<div class="panel-body" id = "list">
<table class="table table-bordered table-hover">
<tr class="warning">
<td>번호</td>
<td>제목</td>
<td>작성자</td>
<td>조회수</td>
<td>날짜</td>
</tr>
<tbody id = "view">
</tbody>
</table>
<a class="btn btn-primary" href="javascript:goForm()">글쓰기</a>
</div>
<div class = "panel-body" id = "wform" style = "display: none;">
<form id ="frm">
<table class = "table table-bordered table-hover">
<tr>
<td>제목</td>
<td><input name = "title" type = "text" class="form-control" placeholder="제목을 입력하세요"></td>
</tr>
<tr>
<td>내용</td>
<td><textarea name = "contents" rows = "7" class="form-control" cols="" placeholder = "내용을 입력하세요"></textarea></td>
</tr>
<tr>
<td>작성자</td>
<td><input name = "writer" type ="text" class = "form-cotrol" placeholder="작성자를 입력하세요"></td>
</tr>
<tr>
<td colspan = "2" align="center">
<a href ="javascript:goList()"><button type = "button" class = "btn btn-info">돌아가기</button></a>
<button id = "fclear" type = "reset" class = "btn btn-danger">취소</button>
<button onclick="goInsert()" type="button" class = "btn btn-warning">작성</button>
</td>
</tr>
<tr>
</tr>
<tr>
</tr>
</table>
</form>
</div>
<div class="panel-footer">LG DX - 박병관</div>
</div>
</div>
<script type="text/javascript">
loadList();
function loadList() {
$.ajax({
url : "boardList.do",
type : "get",
dataType : "json",
success : makeView,
error : function() {
alert("error...");
}
});
}
function makeView(data) {
console.log(data);
let html = "";
for(let i =0; i<data.length; i++){
html += "<tr>";
html += "<td>" + data[i].idx + "</td>";
html += "<td>" + data[i].title + "</td>";
html += "<td>" + data[i].writer + "</td>";
html += "<td>" + data[i].count + "</td>";
html += "<td>" + data[i].indate + "</td>";
html += "<tr>";
}
$("#view").html(html);
goList();
}
function goForm() {
$("#wform").css("display","block");
$("#list").css("display","none");
}
function goList() {
$("#wform").css("display","none");
$("#list").css("display","block");
}
function goInsert() {
let fData = $("#frm").serialize();
console.log(fData);
$.ajax({
url : "boardInsert.do",
type : "post",
data : fData,
success :loadList,
error : function() {
alert("error...");
}
});
$("#fclear").trigger("click");
}
</script>
</body>
</html>
package com.lgdx.controller;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.lgdx.entity.Board;
import com.lgdx.mapper.BoardMapper;
@Controller
public class BoardController {
@Autowired // Spring Memory에 올라간 Mapper객체를 주입받는다
private BoardMapper mapper;
@RequestMapping("/")
public String main() {
System.out.println("메인페이지 이동");
return "main";
}
// 게시글 정보 전체 돌려주는 기능
@RequestMapping("/boardList.do")
public @ResponseBody ArrayList<Board> boardList(){
System.out.println("게시글 정보 전체 돌려주기");
return mapper.boardList();
}
// 게시글 작성 기능
@PostMapping("/boardInsert.do")
public @ResponseBody void boardInsert(Board vo) {
System.out.println("게시글 작성 기능");
mapper.boardInsert(vo);
}
}
package com.lgdx.mapper;
import java.util.ArrayList;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.lgdx.entity.Board;
@Mapper // MyBatis가 해당 Mapper를 찾기위한 맵핑
public interface BoardMapper {
// Spring과 MyBatis를 연결해주는 중간연결체
// Spring에서는 MyBatis에게 요청하고 싶은 기능을
// 이곳에 작성한다
@Select("SELECT * FROM BOARD ORDER BY INDATE DESC")
public ArrayList<Board> boardList();
@Insert("INSERT INTO BOARD(TITLE, CONTENTS, WRITER) VALUES(#{title}, #{contents}, #{writer})")
public void boardInsert(Board vo);
@Select("SELECT * FROM BOARD WHERE IDX = #{idx}")
public Board boardContents(int idx);
@Delete("DELETE FROM BOARD WHERE IDX = #{idx}")
public void boardDelete(int idx);
@Update("UPDATE BOARD SET TITLE = #{title}, CONTENTS = #{contents}, WRITER = #{writer} WHERE IDX = #{idx}")
public void boardUpdate(Board vo);
@Update("UPDATE BOARD SET COUNT = COUNT + 1 WHERE IDX = #{idx}")
public void boardCount(int idx);
}