새소식

인기 검색어

공부/SPRING

231023 JDBC TEMPLATE을 이용한 게시판 구현하기

  • -

BoardVo

package com.example.demo.board2;

import lombok.*;

import java.sql.Date;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor

public class Board {
    private int num;
    private Date wdate;
    private String writer;
    private String title;
    private String content;
}

BoardDao

package com.example.demo.board2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

@Repository
public class BoardDao2 {
    @Autowired
    private JdbcTemplate temp;

    //resultMap: 검색한 결과행을 VO에 매핑하는 클래스
    public class BoardMapper implements RowMapper<Board> {//RowMapper 상속

        @Override
        public Board mapRow(ResultSet rs, int rowNum) throws SQLException {//파람1(rs): 검색결과, 파람2(rowNum): 현재 처리할 줄번호
            return new Board(rs.getInt(1), rs.getDate(2), rs.getString(3), rs.getString(4), rs.getString(5));//검색한 결과인 Board객체
        }
    }

    //db작업하는 method 작성
    public void insert(Board b) {
        String sql = "INSERT INTO board VALUES(seq_board.nextval, sysdate, ?, ?, ?)";
        //jdbc template에는 update(쓰기), query(읽기)
        //Object 배열에 writer, title, content 담기
        temp.update(sql, new Object[]{b.getWriter(), b.getTitle(), b.getContent()});
    }

    public Board select(int num) {//pk로 검색 => 한 줄이 검색되거나 검색되지 않거나
        String sql = "SELECT * FROM board WHERE num=?";
        Board b = null;
        try {
            b = temp.queryForObject(sql, new BoardMapper(), num);//검색된 결과를 담는 BoardMapper, num: 키값
        } catch (Exception e) {
            System.out.println("not found");//검색된 결과를 없으면 not found 출력
        }
        return b;
    }

    public ArrayList<Board> selectAll() {
        String sql = "SELECT * FROM board ORDER BY num DESC";
        return (ArrayList<Board>) temp.query(sql, new BoardMapper());
    }

    public void update(Board b) {
        String sql = "UPDATE board SET title=?, content=? WHERE num=?";
        temp.update(sql, new Object[]{b.getTitle(), b.getContent(), b.getNum()});//b.getNum()은 왜 필요할까 =? WHERE num=?
    }

    public void delete(int num) {
        String sql = "DELETE FROM board WHERE num=?";
        temp.update(sql, num);
    }
}

BoardService

package com.example.demo.board2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

@Service
public class BoardService2 {
    @Autowired
    private BoardDao2 dao;

    public void addBoard(Board b){
        dao.insert(b);
    }

    public Board getBoard(int num){
        return dao.select(num);
    }

    public ArrayList<Board> getAll(){
        return dao.selectAll();
    }

    public void editBoard(Board b){ dao.update(b);}

    public void delBoard(int num){
        dao.delete(num);
    }
}

BoardController

package com.example.demo.board2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;

@Controller
@RequestMapping("/board2")

public class BoardController2 {
    @Autowired
    private BoardService2 service;
    //글 작성, 목록, 번호로 검색, 수정, 삭제

    //글목록
    @RequestMapping("/list")
    public void list(ModelMap map) {//model, modelmap, modelandview 셋 중 하나를 선택하는 기분은?map은 자동으로 뷰페이지로 전달된다.
        ArrayList<Board> list = service.getAll();
        map.addAttribute("list", list);
        //뷰페이지: /board2/list.jsp
    }

    //글작성
    @GetMapping("/add")
    public void addForm() {
    }

    @PostMapping("/add")
    public String add(Board b) {
        service.addBoard(b);
        return "redirect:/board2/list";
    }

    //글 검색 및 수정
    @GetMapping("/edit")
    public void editForm(int num, ModelMap map) {
        Board b = service.getBoard(num);
        map.addAttribute("b", b);
    }

    @PostMapping("/edit")
    public String edit(Board b) {
        service.editBoard(b);
        return "redirect:/board2/list";
    }

    //글 삭제
    @RequestMapping("/del")
    public String delBoard(int num) {
        service.delBoard(num);
        return "redirect:/board2/list";
    }

}

add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>게시판 글 작성</title>
</head>
<body>
<form action="/board2/add" method="post">
<table border="1">
    <tr><th>작성자</th><td><input type="text" name="writer" value="${sessionScope.loginId}" readonly></td></tr>
    <tr><th>제목</th><td><input type="text" name="title"></td></tr>
    <tr><th>내용</th><td><textarea name="content" rows="30" cols="50"></textarea></td></tr>
    <tr><th>작성</th><td><input type="submit" value="작성"></td></tr>
</table>
</form>
</body>
</html>

edit.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $("#del").click(function(){
                location.href="/board2/del?num=${b.num}"; //board2/del로 삭제 요청.
            });
        });
    </script>
</head>
<body>
<c:if test="${sessionScope.loginId!=b.writer}">
    <c:set var="stat">readonly</c:set>
</c:if>
<h3>상세 페이지</h3>
<form action="/board2/edit" method="post">
    <table border="1">
        <tr>
            <th>번호</th>
            <td><input type="number" name="num" value="${b.num}" readonly></td>
        </tr>
        <tr>
            <th>작성일</th>
            <td><input type="text" value="${b.wdate}" readonly></td>
        </tr>
        <tr>
            <th>작성자</th>
            <td><input type="text" name="writer" value="${b.writer}" readonly></td>
        </tr>
        <tr>
            <th>제목</th>
            <td><input type="text" name="title" value="${b.title}" ${stat }></td>
        </tr>
        <tr>
            <th>내용</th>
            <td><textarea name="content" rows="30" cols="50" ${stat}>${b.content}</textarea></td>
        </tr>
        <c:if test="${sessionScope.loginId==b.writer}">
        <tr>
            <th>편집</th>
            <td><input type="submit" value="수정"><input type="button" value="삭제" id="del"></td>
        </tr>
        </c:if>
    </table>
</form>
</body>
</html>

list.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>글 목록</h3>
<a href="/board2/add">글 작성하기</a>
<table border="1">
    <tr>
        <th>글번호</th>
        <th>제목</th>
        <th>작성자</th>
    </tr>
    <c:forEach var="b" items="${list }">
    <tr>
        <td>${b.num }</td>
        <td><a href="/board2/edit?num=${b.num }">${b.title }</a></td>
        <td>${b.writer }</td>
    </tr>
        </c:forEach>
</table>
</body>
</html>

'공부 > SPRING' 카테고리의 다른 글

인텔리제이로 Spring Project 생성하기  (0) 2023.10.23
231019-231020 Spring  (0) 2023.10.20
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.