✅ BoardUpdateServlet.java 생성 후 맵핑이름 작성 (사진 잘못됨!)
✅ retrieve.jsp에 <form> 작성
✅ retrieve.jsp에 hidden 작성
✅ BoardUpdateServlet.java 작성
✅ BoardMapper.xml의 update 부분에 수정될 수 있는 것들 다 작성
✅ BoardDAO.java에 Sqlsession과 파라미터를 이용해서 실제 DB와 연동
✅ BoardService.java에 BoardDAO 메서드를 복사해서 Sqlsession 파라미터만 제거한다.
✅ BoardServiceImpl.java 에 BoardDAO 연동 코드 작성 (오버라이드)
✅ BoardUpdateServlet.java 작성
✅ dto를 서비스 거쳐서 DAO까지 전달
- BoardService 연동해서 화면에 보여줄 데이터 반환
- scope에 저장
- jsp로 요청위임
💡 결과
package com.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dto.BoardDTO;
import com.service.BoardService;
import com.service.BoardServiceImpl;
/**
* Servlet implementation class BoardListServlet
*/
@WebServlet("/update")
public class BoardUpdateServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String num = request.getParameter("num");
String title = request.getParameter("title");
String author = request.getParameter("author");
String content = request.getParameter("content");
BoardDTO dto = new BoardDTO();
dto.setNum(Integer.parseInt(num));
dto.setTitle(title);
dto.setAuthor(author);
dto.setContent(content);
// dto를 서비스 거쳐서 DAO까지 전달
BoardService service = new BoardServiceImpl();
int n = service.update(dto);
// 요청위임
response.sendRedirect("list");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<%@page import="com.dto.BoardDTO"%>
<%@ 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>
<body>
<h2>게시판 자세히 보기</h2>
<%
//BoardRetrieveServlet에서
//request.setAttribute("boardRetrieve", dto) 값 얻기
BoardDTO dto = (BoardDTO) request.getAttribute("boardRetrieve");
int num = dto.getNum();
String title = dto.getTitle();
String author = dto.getAuthor();
String content = dto.getContent();
String writeday = dto.getWriteday();
int readcnt = dto.getReadcnt();
%>
<form action="update" method="get">
<input type="hidden" name="num" value="<%= num %>">
글번호:<%= num%><br>
작성일:<%= writeday%><br>
조회수:<%= readcnt%><br>
<%= title %>
제목:<input type="text" name="title" value="<%= title%>"><br>
작성자:<input type="text" name="author" value="<%= author%>"><br>
내용:<textarea rows="10" cols="10" name="content"><%= content%></textarea>
<input type="submit" value="수정">
</form>
<a href="list">목록</a>
</body>
</html>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="BoardMapper">
<select id="list" resultType="BoardDTO">
select num, title, author, content, writeday, readcnt
from board
order by num desc
</select>
<insert id="write" parameterType="BoardDTO">
insert into board (num, title, author, content)
values (board_seq.nextval, #{title}, #{author}, #{content})
</insert>
<select id="retrieve" parameterType="int"
resultType="BoardDTO">
select num, title, author, content, writeday, readcnt
from board
where num = #{num}
</select>
<update id="readcnt" parameterType="int">
update board
set readcnt = readcnt + 1
where num = #{num}
</update>
<update id="update" parameterType="BoardDTO">
update board
set title=#{title}, author=#{author}, content=#{content}
where num = #{num}
</update>
</mapper>
package com.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.dto.BoardDTO;
public class BoardDAO {
// 전체 목록
public List<BoardDTO> list(SqlSession session){
List<BoardDTO> list = session.selectList("BoardMapper.list");
return list;
}
// 글 저장
public int write(SqlSession session, BoardDTO dto) {
int n = session.insert("BoardMapper.write", dto);
return n;
}
// 글 자세히 보기
public BoardDTO retrieve(SqlSession session, int num) {
BoardDTO dto = session.selectOne("BoardMapper.retrieve", num);
return dto;
}
// 조회수 증가
public int readcnt (SqlSession session, int num) {
int n = session.update("BoardMapper.readcnt", num);
return n;
}
// 글 수정
public int update(SqlSession session, BoardDTO dto) {
int n = session.update("BoardMapper.update", dto);
return n;
}
}
package com.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.dto.BoardDTO;
public interface BoardService {
public List<BoardDTO> list();
public int write(BoardDTO dto);
public BoardDTO retrieve(int num);
public int update(BoardDTO dto);
}
package com.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.config.MySqlSessionFactory;
import com.dao.BoardDAO;
import com.dto.BoardDTO;
public class BoardServiceImpl implements BoardService {
@Override
public List<BoardDTO> list() {
List<BoardDTO> list = null; //return 하기 위해 밖에서 선언
SqlSession session = MySqlSessionFactory.getSession();
try {
// DAO 연동코드
BoardDAO dao = new BoardDAO(); //객체생성
list = dao.list(session);
}finally {
session.close();
}
return list;
}
@Override
public int write(BoardDTO dto) {
int n = 0;
SqlSession session = MySqlSessionFactory.getSession();
try {
// DAO 연동코드
BoardDAO dao = new BoardDAO(); //객체생성
n = dao.write(session, dto);
session.commit(); //mybatis는 자동커밋이 아니기 때문에 반드시 커밋
}finally {
session.close();
}
return n;
}
@Override
public BoardDTO retrieve(int num) {
BoardDTO dto = null;
SqlSession session = MySqlSessionFactory.getSession();
try {
// DAO 연동코드
BoardDAO dao = new BoardDAO(); //객체생성
//조회수 증가
int n = dao.readcnt(session, num);
session.commit();
//자세히 보기
dto = dao.retrieve(session, num);
}finally {
session.close();
}
return dto;
}
@Override
public int update(BoardDTO dto) {
int n = 0;
SqlSession session = MySqlSessionFactory.getSession();
try {
// DAO 연동코드
BoardDAO dao = new BoardDAO(); //객체생성
n = dao.update(session, dto);
session.commit();
}finally {
session.close();
}
return n;
}
}
'Programming Language > JSP' 카테고리의 다른 글
게시판 구축 프로젝트(7) - 검색하기 (0) | 2023.08.18 |
---|---|
게시판 구축 프로젝트(6) - 삭제하기 (0) | 2023.08.18 |
게시판 구축 프로젝트(4) - 조회수 증가 (1) | 2023.08.18 |
게시판 구축 프로젝트(3) - 글 자세히 보기 (0) | 2023.08.18 |
게시판 구축 프로젝트(2) - 글쓰기 (0) | 2023.08.18 |