ㅁ 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>
- 쿼리는 이렇게 작성했었다.
ㅁ list.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 list }">
존재하는 공지사항이 없습니다
</c:when>
<c:otherwise>
<table border="1">
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>내용</th>
</tr>
</thead>
<tbody>
<c:forEach var="n" items="${ list }">
<tr>
<td>${ n.no }</td>
<td><a href="${contextPath}/notice/detail.do?no=${n.no}">${ n.title }</a></td>
<td>${ n.content }</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:otherwise>
</c:choose>
<a href="${contextPath}/notice/enroll.do">공지사항 등록</a>
</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.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() {}
// 이렇게만 작성해도 페이지 이동이 된다.
}
- noticeEnroll 메소드 생성
ㅁ src/main/webapp/WEB-INF/views/notice에 enroll.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/insert.do" method="post">
제목 : <input type="text" name="title"> <br>
내용 : <textarea name="content"></textarea> <br><br>
<input type="submit" value="등록">
</form>
</body>
</html>
ㅁ web.xml
<?xml version="1.0" encoding="UTF-8"?>
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 인코딩 필터 등록 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
- 한글 데이터 깨짐 방지.
- 서블릿 관련된 부분 하단에 <filter>, <filter-mapping> 태그를 작성해서 인코딩 필터를 등록한다.
ㅁ 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:/";
}
}
}
'Spring' 카테고리의 다른 글
[Spring] MyBatis(8) 게시글 일괄삭제 (0) | 2024.10.22 |
---|---|
[Spring] MyBatis(7) 상세페이지 -> 수정페이지 (0) | 2024.10.22 |
[Spring] MyBatis(5) 쿼리 로그찍기 (0) | 2024.10.22 |
[Spring] MyBatis(4) 공지사항 목록페이지 -> 상세페이지 (0) | 2024.10.22 |
[Spring] MyBatis(3) 자리 옮김 (2) | 2024.10.21 |