✅ BoardMapper.xml에 update 작성

 

✅ BoardDAO.java에 Sqlsession과 파라미터를 이용해서 실제 DB와 연동

 

✅ BoardServiceImpl.java의 retrieve 오버라이드 부분에 조회수 증가 시키는 코드 작성

 

✅  retrieve.jsp 작성

 

 

 

 


 

 

 

💡 결과

 

 

 


 

retrieve.jsp
<%@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="" method="">
글번호:<%= 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>

 

 

BoardMapper.xml
<?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>
    
    
    
    
</mapper>

 

BoardDAO.java
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;
	}

}

 

BoardServiceImpl.java
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;
	}

}
xoo | 수진