ㅁ 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";
}
}
}
'Spring' 카테고리의 다른 글
[Spring] AOP(1) 세팅 (0) | 2024.10.22 |
---|---|
[Spring] MyBatis(8) 게시글 일괄삭제 (0) | 2024.10.22 |
[Spring] MyBatis(6) 목록페이지 -> 등록페이지 (0) | 2024.10.22 |
[Spring] MyBatis(5) 쿼리 로그찍기 (0) | 2024.10.22 |
[Spring] MyBatis(4) 공지사항 목록페이지 -> 상세페이지 (0) | 2024.10.22 |