본문 바로가기
Spring

[Spring] MyBatis(7) 상세페이지 -> 수정페이지

by moca7 2024. 10. 22.

 

ㅁ notice-mapper.xml

 

 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="noticeMapper">


  <resultMap id="noticeResultMap" type="NoticeDto">
    <result column="no" property="no" />
    <result column="title" property="title" />
    <result column="content" property="content" />
  </resultMap>


 
  <select id="selectNoticeList" resultMap="noticeResultMap">
    select
           no
        ,  title
        ,  content
      from notice
     order
        by no desc      
  </select>
 
 
 
  <!-- 번호로 공지사항 조회 -->
  <select id="selectNoticeByNo" resultMap="noticeResultMap">
    select
            no
         ,  title
         ,  content
      from  notice
     where  no = #{ noticeNo }
  </select>
 
 
  <!-- 공지사항 등록 -->
  <insert id="insertNotice">
    insert
      into notice
      (
        no
      , title
      , content    
      )
      values
      (
        seq_notice.nextval
      , #{ title }
      , #{ content }  
      )
  </insert>
 
 
  <!-- 공지사항 수정 -->
  <update id="updateNotice">
    update
            notice
       set  title = #{title}
         ,  content = #{content}      
     where  no = #{no}          
  </update>
 
 
 
</mapper>

 

-쿼리는 이렇게 작성했었다.

 

 

 

 

ㅁ detail.jsp

 

 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <h3>공지사항 상세 페이지</h3>

  <c:choose>
    <c:when test="${ empty n }">
      * 조회된 공지사항이 없습니다.
    </c:when>
   
    <c:otherwise>
      * 조회된 공지사항 정보 <br><br>
     
      번호 : ${ n.no } <br>
      제목 : ${ n.title } <br>
      내용 : ${ n.content } <br><br>
     
      <a href="${ contextPath }/notice/modify.do?no=${n.no}">수정페이지로 이동</a>
    </c:otherwise>
  </c:choose>

</body>
</html>
 

 

- 상세페이지에서 수정페이지로 이동할 수 있게 a 태그를 작성했다. 

- 쿼리스트링으로 해당 글 번호를 넘긴다.

 

 

 

ㅁ NoticeController

 

 
package com.br.sbatis.controller;

import java.util.List;

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 com.br.sbatis.dto.NoticeDto;
import com.br.sbatis.service.NoticeService;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RequestMapping("/notice")
@RequiredArgsConstructor
@Controller
public class NoticeController {

 
  private final NoticeService noticeService;
 
  @GetMapping("/list.do") // /notice/list.do
  public void noticeList(Model model) {
    List<NoticeDto> list = noticeService.selectNoticeList();
    log.debug("list: {}", list);
    model.addAttribute("list", list);
   
    // return "notice/list"; void여도 포워딩하려 한다. url mapping("/notice/list")를 가지고 포워딩한다.
  }
 
 
 
  @GetMapping("/detail.do") // /notice/detail.do
  public void noticeDetail(int no, Model model) {
    NoticeDto n = noticeService.selectNoticeByNo(no);
    model.addAttribute("n",n);
  }
 
 
  @GetMapping("/enroll.do") // /notice/enroll.do
  public void noticeEnroll() {}
  // 이렇게만 작성해도 페이지 이동이 된다.
 
 
  @PostMapping("/insert.do")
  public String noticeInsert(NoticeDto n) {
    int result = noticeService.insertNotice(n);
   
    if(result > 0) { // 성공시 다시 목록페이지
      return "redirect:/notice/list.do";
    }else { // 실패시 메인페이지
      return "redirect:/";
    }
  }
 
 
 
  @GetMapping("/modify.do") // /notice/modify.do
  public void noticeModify(int no, Model model) {
    model.addAttribute("n", noticeService.selectNoticeByNo(no));
  }
 
 
 
}

 

- noticeModify 메소드 생성.

 

 

 

 

ㅁ modify.jsp

 

 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <h3>공지사항 수정 페이지</h3>

  <form action="${ contextPath }/notice/update.do" method="post">
    <input type="hidden" name="no" value="${ n.no }">
    제목 : <input type="text" name="title" value="${ n.title }"> <br>
    내용 : <textarea name="content">${ n.content }</textarea> <br><br>
   
    <button type="submit">수정</button>
  </form>

</body>
</html>
 

 

- 컨트롤러로 넘길 dto의 필드명과 넘기는 key 값이 같으면 바로 담긴다.

 

 

 

 

ㅁ NoticeController

 

 
package com.br.sbatis.controller;

import java.util.List;

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 com.br.sbatis.dto.NoticeDto;
import com.br.sbatis.service.NoticeService;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RequestMapping("/notice")
@RequiredArgsConstructor
@Controller
public class NoticeController {

 
  private final NoticeService noticeService;
 
  @GetMapping("/list.do") // /notice/list.do
  public void noticeList(Model model) {
    List<NoticeDto> list = noticeService.selectNoticeList();
    log.debug("list: {}", list);
    model.addAttribute("list", list);
   
    // return "notice/list"; void여도 포워딩하려 한다. url mapping("/notice/list")를 가지고 포워딩한다.
  }
 
 
 
  @GetMapping("/detail.do") // /notice/detail.do
  public void noticeDetail(int no, Model model) {
    NoticeDto n = noticeService.selectNoticeByNo(no);
    model.addAttribute("n",n);
  }
 
 
  @GetMapping("/enroll.do") // /notice/enroll.do
  public void noticeEnroll() {}
  // 이렇게만 작성해도 페이지 이동이 된다.
 
 
  @PostMapping("/insert.do")
  public String noticeInsert(NoticeDto n) {
    int result = noticeService.insertNotice(n);
   
    if(result > 0) { // 성공시 다시 목록페이지
      return "redirect:/notice/list.do";
    }else { // 실패시 메인페이지
      return "redirect:/";
    }
  }
 
 
 
  @GetMapping("/modify.do") // /notice/modify.do
  public void noticeModify(int no, Model model) {
    model.addAttribute("n", noticeService.selectNoticeByNo(no));
  }
 
 
  @PostMapping("/update.do")
  public String noticeUpdate(NoticeDto n) {
    int result = noticeService.updateNotice(n);

    if(result > 0){ // 성공시 상세페이지
      return "redirect:/notice/detail.do?no=" + n.getNo();
    }else { // 실패시 목록페이지
      return "redirect:/notice/list.do";
    }
  }

}