반응형

1. /com/board/domain/page클래스를 만들고 분리 하겠습니다.

변수를 설정하고 getter와 setter를 설정합니다.

package com.board.domain;

public class Page {

	// 현재 페이지 번호
	private int num;

	// 게시물 총 갯수
	private int count;

	// 한 페이지에 출력할 게시물 갯수
	private int postNum = 10;

	// 하단 페이징 번호 ([ 게시물 총 갯수 ÷ 한 페이지에 출력할 갯수 ]의 올림)
	private int pageNum;

	// 출력할 게시물
	private int displayPost;

	// 한번에 표시할 페이징 번호의 갯수
	private int pageNumCnt = 10;

	// 표시되는 페이지 번호 중 마지막 번호
	private int endPageNum;

	// 표시되는 페이지 번호 중 첫번째 번호
	private int startPageNum;

	// 다음/이전 표시 여부
	private boolean prev;
	private boolean next;
	
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public int getPostNum() {
		return postNum;
	}
	public void setPostNum(int postNum) {
		this.postNum = postNum;
	}
	public int getPageNum() {
		return pageNum;
	}
	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	}
	public int getDisplayPost() {
		return displayPost;
	}
	public void setDisplayPost(int displayPost) {
		this.displayPost = displayPost;
	}
	public int getPageNumCnt() {
		return pageNumCnt;
	}
	public void setPageNumCnt(int pageNumCnt) {
		this.pageNumCnt = pageNumCnt;
	}
	public int getEndPageNum() {
		return endPageNum;
	}
	public void setEndPageNum(int endPageNum) {
		this.endPageNum = endPageNum;
	}
	public int getStartPageNum() {
		return startPageNum;
	}
	public void setStartPageNum(int startPageNum) {
		this.startPageNum = startPageNum;
	}
	public boolean getPrev() {
		return prev;
	}
	public boolean getNext() {
		return next;
	}
		
	private void dataCalc() {
		 
		 // 마지막 번호
		 endPageNum = (int)(Math.ceil((double)num / (double)pageNumCnt) * pageNumCnt);
		 
		 // 시작 번호
		 startPageNum = endPageNum - (pageNumCnt - 1);
		 
		 // 마지막 번호 재계산
		 int endPageNum_tmp = (int)(Math.ceil((double)count / (double)pageNumCnt));
		 
		 if(endPageNum > endPageNum_tmp) {
		  endPageNum = endPageNum_tmp;
		 }
		 
		 prev = startPageNum == 1 ? false : true;
		 next = endPageNum * pageNumCnt >= count ? false : true;
		 
		 displayPost = (num - 1) * postNum;
		 
		}
		
}

2.  boardController

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.domain.Page;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
	
	//게시물 수정
	@RequestMapping(value = "/modify", method = RequestMethod.GET)
	public void getModify(@RequestParam("bno") int bno, Model model) throws Exception {
		
		BoardVO vo = service.view(bno);
		
		model.addAttribute("view", vo);
		
		System.out.println("view" + bno);
	}
	
	//게시물 수정
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String postModify(BoardVO vo) throws Exception{
		service.modify(vo);
		
		return "redirect:/board/view?bno=" + vo.getBno();
	}
	
	//게시물 삭제
	@RequestMapping(value = "/delete", method = RequestMethod.GET)
	public String getDelete(@RequestParam("bno") int bno) throws Exception{
		
		service.delete(bno);
		return "redirect:/board/list";
	}
	
	// 게시물 목록 + 페이징 추가
	@RequestMapping(value = "/listPage", method = RequestMethod.GET)
	public void getListPage(Model model, @RequestParam("num") int num) throws Exception {
		Page page = new Page();
		
		page.setNum(num);
		page.setCount(service.count());  

		List list = null; 
		list = service.listPage(page.getDisplayPost(), page.getPostNum());

		model.addAttribute("list", list);  
		
		model.addAttribute("page", page);
		model.addAttribute("select", num);
		
	}
	
	
	
	
}

3. listPage.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 목록</title>
</head>
<body>
<div id="nav">
	<%@ include file="../include/nav.jsp" %>
</div>
<table>
	<thead>
		<tr>
			<th>번호</th>
			<th>제목</th>
			<th>작성일</th>
			<th>작성자</th>
			<th>조회수</th>
		</tr>
	</thead>
		
	<tbody>
		<c:forEach items="${list}" var="list">
			<tr>
				<td>${list.bno}</td>
				<td>
					<a href="/board/view?bno=${list.bno}">${list.title}</a>
				</td>
				<td>${list.regDate}</td>
				<td>${list.writer}</td>
				<td>${list.viewCnt}</td>
			</tr>
		</c:forEach>
		
	</tbody>
</table>
<div>
<c:if test="${page.prev }">
	<span>[ <a href="/board/listPage?num=${page.startPageNum - 1 }">이전</a>]</span>
</c:if>



<c:forEach begin="${page.startPageNum}" end="${page.endPageNum}" var="num">
	<span>
		
		<c:if test="${select != num }">
		<a href="/board/listPage?num=${num}">${num}</a>
		</c:if>
		
		<c:if test="${select == num }">
		<b>${num }</b>
		</c:if>
		
	</span>
</c:forEach>


<c:if test="${page.next}">
	<span>[<a href="/board/listPage?num=${page.endPageNum + 1 }">다음</a>]</span>
</c:if>


</div>
</body>
</html>
반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. BoardController

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.domain.Page;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
	
	//게시물 수정
	@RequestMapping(value = "/modify", method = RequestMethod.GET)
	public void getModify(@RequestParam("bno") int bno, Model model) throws Exception {
		
		BoardVO vo = service.view(bno);
		
		model.addAttribute("view", vo);
		
		System.out.println("view" + bno);
	}
	
	//게시물 수정
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String postModify(BoardVO vo) throws Exception{
		service.modify(vo);
		
		return "redirect:/board/view?bno=" + vo.getBno();
	}
	
	//게시물 삭제
	@RequestMapping(value = "/delete", method = RequestMethod.GET)
	public String getDelete(@RequestParam("bno") int bno) throws Exception{
		
		service.delete(bno);
		return "redirect:/board/list";
	}
	
	// 게시물 목록 + 페이징 추가
	@RequestMapping(value = "/listPage", method = RequestMethod.GET)
	public void getListPage(Model model, @RequestParam("num") int num) throws Exception {
		Page page = new Page();
		
		page.setNum(num);
		page.setCount(service.count());  

		List list = null; 
		list = service.listPage(page.getDisplayPost(), page.getPostNum());

		model.addAttribute("list", list);   
		model.addAttribute("pageNum", page.getPageNum());

		model.addAttribute("startPageNum", page.getStartPageNum());
		model.addAttribute("endPageNum", page.getEndPageNum());
		 
		  model.addAttribute("prev", page.getPrev());
		model.addAttribute("next", page.getNext());  

		model.addAttribute("select", num);
		/*
	 // 게시물 총 갯수
	 int count = service.count();
	  
	 // 한 페이지에 출력할 게시물 갯수
	 int postNum = 10;
	  
	 // 하단 페이징 번호 ([ 게시물 총 갯수 ÷ 한 페이지에 출력할 갯수 ]의 올림)
	 int pageNum = (int)Math.ceil((double)count/postNum);
	  
	 // 출력할 게시물
	 int displayPost = (num - 1) * postNum;
	    
	 // 한번에 표시할 페이징 번호의 갯수
	 int pageNum_cnt = 10;
	 
	 // 표시되는 페이지 번호 중 마지막 번호
	 int endPageNum = (int)(Math.ceil((double)num / (double)pageNum_cnt) * pageNum_cnt);
	 
	 //표시되는 페이지 번호 중 첫번째 번호
	 int startPageNum = endPageNum - (pageNum_cnt -1);
	 
	 //마지막 번호 재계산
	 int endPageNum_tmp = (int)(Math.ceil((double)count) / (double)pageNum_cnt);
	 
	 if(endPageNum > endPageNum_tmp) {
		 endPageNum = endPageNum_tmp;
	 }
	 
	 boolean prev = startPageNum == 1 ? false : true;
	 boolean next = endPageNum * pageNum_cnt >=count ? false : true;
	 
	 List list = null; 
	 list = service.listPage(displayPost, postNum);
	 model.addAttribute("list", list);   
	 model.addAttribute("pageNum", pageNum);
	 
	 //시작 및 끝 번호
	 model.addAttribute("startPageNum", startPageNum);
	 model.addAttribute("endPageNum", endPageNum);
	 
	 // 이전 및 다음
	 model.addAttribute("prev", prev);
	 model.addAttribute("next", next);
	 
	// 현재 페이지를 select에 담아서 보냄
	 model.addAttribute("select", num); 
	 */
	}
	
	
	
	
}

2. listPage.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 목록</title>
</head>
<body>
<div id="nav">
	<%@ include file="../include/nav.jsp" %>
</div>
<table>
	<thead>
		<tr>
			<th>번호</th>
			<th>제목</th>
			<th>작성일</th>
			<th>작성자</th>
			<th>조회수</th>
		</tr>
	</thead>
		
	<tbody>
		<c:forEach items="${list}" var="list">
			<tr>
				<td>${list.bno}</td>
				<td>
					<a href="/board/view?bno=${list.bno}">${list.title}</a>
				</td>
				<td>${list.regDate}</td>
				<td>${list.writer}</td>
				<td>${list.viewCnt}</td>
			</tr>
		</c:forEach>
		
	</tbody>
</table>
<div>
<c:if test="${prev }">
	<span>[ <a href="/board/listPage?num=${startPageNum - 1 }">이전</a>]</span>
</c:if>



<c:forEach begin="${startPageNum}" end="${endPageNum}" var="num">
	<span>
		
		<c:if test="${select != num }">
		<a href="/board/listPage?num=${num}">${num}</a>
		</c:if>
		
		<c:if test="${select == num }">
		<b>${num }</b>
		</c:if>
		
	</span>
</c:forEach>


<c:if test="${next}">
	<span>[<a href="/board/listPage?num=${endPageNum + 1 }">다음</a>]</span>
</c:if>


<%--
 <c:forEach begin="1" end="${pageNum}" var="num">
    <span>
     <a href="/board/listPage?num=${num}">${num}</a>
  </span>
  
  
 </c:forEach>
 --%>
</div>
</body>
</html>

 

출처 : https://kuzuro.blogspot.com/2019/09/10-2.html

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. 게시물 총 개수 구하기 (boardMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.board.mappers.board">

	<!-- 게시물 목록 
	resultType은 쿼리를 실행한 뒤 결과가 있을 경우에 사용하며, 
	반대로 데이터를 넣을 때는 parameterType을 사용
	-->
	<select id="list" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, writer, regDate, viewCnt
		from tbl_board
	</select>
	
	<!-- 게시물 작성 
	데이터를 넣을 때는 parameterType을 사용
	-->
	<insert id="write" parameterType="com.board.domain.BoardVO">
		insert into
			tbl_board(title, content, writer)
				values(#{title}, #{content}, #{writer})
	</insert>
	
	<!--  게시물 조회 
	파라미터 타입은 매퍼에 들어오는 데이터, 리설트 타입은 매퍼가 내보내는 데이터입니다.-->
	<select id="view" parameterType="int" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, regDate, viewCnt
		from 
			tbl_board
			where
				bno = #{bno}
	</select>
	<!-- 게시물 수정 -->
	<update id="modify" parameterType="com.board.domain.BoardVO">
		update tbl_board
			set
				title = #{title},
				content = #{content},
				writer = #{writer}
			where bno = #{bno}
	</update>
	
	<!-- 게시물 삭제 -->
	<delete id="delete" parameterType="int">
		delete
			from tbl_board
		where bno = #{bno}
	</delete>
	
	<!-- 게시물 총 개수 -->
	<select id="count" resultType="int">
		select count(bno) from tbl_board
	</select>
	
</mapper>

2. DAO와 DAOImpl에 코드 추가

package com.board.dao;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardDAO {
		
		//게시물 목록
		public List<BoardVO> list() throws Exception;
		
		//게시물 작성
		public void write(BoardVO vo) throws Exception;
		
		//게시물 조회
		public BoardVO view(int bno) throws Exception;
		
		//게시물 수정
		public void modify(BoardVO vo) throws Exception;
		
		//게시물 삭제
		public void delete(int bno) throws Exception;
		
		//게시물 총 개수
		public int count() throws Exception;
}
package com.board.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.board.domain.BoardVO;

// DAO에 특화된 어노테이션. @Component 어노테이션을 써도 상관 없지만, DAO 클래스들에 @Repository 어노테이션을 사용함으로써
// @Component 어노테이션이 가진 특성과 함께, DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로
// 처리할 수 있는 장점 또한 갖는다.
@Repository
public class BoardDAOImpl implements BoardDAO {
	
//	name으로 DI를 가능케 한다. 자바에서 지원하는 어노테이션이며 프레임워크에 종속적이지 않아 상사용해도 좋다.
//	타입으로 연결한다.
	@Inject
	private SqlSession sql;
	
	private static String namespace = "com.board.mappers.board";
	
	//게시물 목록
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return sql.selectList(namespace + ".list");
	}
	
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		
		sql.insert(namespace + ".write", vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return sql.selectOne(namespace + ".view", bno);
		
	}
	//게시물 수정
	@Override
	public void modify(BoardVO vo) throws Exception {
		sql.update(namespace + ".modify", vo);
		
	}
	//게시물 삭제
	@Override
	public void delete(int bno) throws Exception {
		sql.delete(namespace + ".delete", bno);
		
	}
	
	//게시물 총 개수
	@Override
	public int count() throws Exception {
		return sql.selectOne(namespace + ".count");
		
	}
	
	
	

}

3. Service와 ServiceImpl에 코드 추가

package com.board.service;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardService {
	//게시물 목록
	public List<BoardVO> list() throws Exception;
	//게시물 작성
	public void write(BoardVO vo) throws Exception;
	//게시물 조회
	public BoardVO view(int bno) throws Exception;
	//게시물 수정
	public void modify(BoardVO vo) throws Exception;
	//게시물 삭제
	public void delete(int bno) throws Exception;
	//게시물 총 개수
	public int count() throws Exception;
}
package com.board.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.board.dao.BoardDAO;
import com.board.domain.BoardVO;

@Service
public class BoardServiceImpl implements BoardService {
	
	@Inject
	private BoardDAO dao;
	//게시물 리스트
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return dao.list();
	}
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		dao.write(vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return dao.view(bno);
	}
	//게시물 수정
	@Override
	public void modify(BoardVO vo) throws Exception {
		
		dao.modify(vo);
		
	}
	//게시물 삭제
	@Override
	public void delete(int bno) throws Exception {
		dao.delete(bno);
		
	}
	@Override
	public int count() throws Exception {
		return dao.count();
	}

}

4. BoardController 코드 추가

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
	
	//게시물 수정
	@RequestMapping(value = "/modify", method = RequestMethod.GET)
	public void getModify(@RequestParam("bno") int bno, Model model) throws Exception {
		
		BoardVO vo = service.view(bno);
		
		model.addAttribute("view", vo);
		
		System.out.println("view" + bno);
	}
	
	//게시물 수정
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String postModify(BoardVO vo) throws Exception{
		service.modify(vo);
		
		return "redirect:/board/view?bno=" + vo.getBno();
	}
	
	//게시물 삭제
	@RequestMapping(value = "/delete", method = RequestMethod.GET)
	public String getDelete(@RequestParam("bno") int bno) throws Exception{
		
		service.delete(bno);
		return "redirect:/board/list";
	}
	
	// 게시물 목록 + 페이징 추가
	@RequestMapping(value = "/listpage", method = RequestMethod.GET)
	public void getListPage(Model model) throws Exception {
	  
	 List<BoardVO> list = null;  list = service.list();
	 model.addAttribute("list", list);   
	}
}

5. mapper에 게시물 출력 개수 쿼리 추가

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.board.mappers.board">

	<!-- 게시물 목록 
	resultType은 쿼리를 실행한 뒤 결과가 있을 경우에 사용하며, 
	반대로 데이터를 넣을 때는 parameterType을 사용
	-->
	<select id="list" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, writer, regDate, viewCnt
		from tbl_board
	</select>
	
	<!-- 게시물 작성 
	데이터를 넣을 때는 parameterType을 사용
	-->
	<insert id="write" parameterType="com.board.domain.BoardVO">
		insert into
			tbl_board(title, content, writer)
				values(#{title}, #{content}, #{writer})
	</insert>
	
	<!--  게시물 조회 
	파라미터 타입은 매퍼에 들어오는 데이터, 리설트 타입은 매퍼가 내보내는 데이터입니다.-->
	<select id="view" parameterType="int" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, regDate, viewCnt
		from 
			tbl_board
			where
				bno = #{bno}
	</select>
	<!-- 게시물 수정 -->
	<update id="modify" parameterType="com.board.domain.BoardVO">
		update tbl_board
			set
				title = #{title},
				content = #{content},
				writer = #{writer}
			where bno = #{bno}
	</update>
	
	<!-- 게시물 삭제 -->
	<delete id="delete" parameterType="int">
		delete
			from tbl_board
		where bno = #{bno}
	</delete>
	
	<!-- 게시물 총 개수 -->
	<select id="count" resultType="int">
		select count(bno) from tbl_board
	</select>
	
	<!-- 게시물 목록 + 페이징 -->
	<select id="listPage" parameterType="hashMap" resultType="com.board.domain.BoardVO">
		select
			bno, title, writer, regDate, viewCnt
		from tbl_board
		order by bno desc
			limit #{displayPost}, #{postNum}
	
	</select>
</mapper>

6. DAO와 DAOImpl 코드 추가

package com.board.dao;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardDAO {
		
		//게시물 목록
		public List<BoardVO> list() throws Exception;
		
		//게시물 작성
		public void write(BoardVO vo) throws Exception;
		
		//게시물 조회
		public BoardVO view(int bno) throws Exception;
		
		//게시물 수정
		public void modify(BoardVO vo) throws Exception;
		
		//게시물 삭제
		public void delete(int bno) throws Exception;
		
		//게시물 총 개수
		public int count() throws Exception;
		
		//게시물 목록 + 페이징
		public List listPage(int displayPost, int postNum) throws Exception;
		
}
package com.board.dao;

import java.util.HashMap;
import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.board.domain.BoardVO;

// DAO에 특화된 어노테이션. @Component 어노테이션을 써도 상관 없지만, DAO 클래스들에 @Repository 어노테이션을 사용함으로써
// @Component 어노테이션이 가진 특성과 함께, DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로
// 처리할 수 있는 장점 또한 갖는다.
@Repository
public class BoardDAOImpl implements BoardDAO {
	
//	name으로 DI를 가능케 한다. 자바에서 지원하는 어노테이션이며 프레임워크에 종속적이지 않아 상사용해도 좋다.
//	타입으로 연결한다.
	@Inject
	private SqlSession sql;
	
	private static String namespace = "com.board.mappers.board";
	
	//게시물 목록
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return sql.selectList(namespace + ".list");
	}
	
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		
		sql.insert(namespace + ".write", vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return sql.selectOne(namespace + ".view", bno);
		
	}
	//게시물 수정
	@Override
	public void modify(BoardVO vo) throws Exception {
		sql.update(namespace + ".modify", vo);
		
	}
	//게시물 삭제
	@Override
	public void delete(int bno) throws Exception {
		sql.delete(namespace + ".delete", bno);
		
	}
	
	//게시물 총 개수
	@Override
	public int count() throws Exception {
		return sql.selectOne(namespace + ".count");
		
	}

	// 게시물 목록 + 페이징
	// 매개변수인 displayPost, postNum을 해시맵을 이용하여 하나로 그룹지어주고 매퍼로 전송합니다.
	@Override
	public List listPage(int displayPost, int postNum) throws Exception {

	 HashMap data = new HashMap();
	  
	 data.put("displayPost", displayPost);
	 data.put("postNum", postNum);
	  
	 return sql.selectList(namespace + ".listPage", data);
	}
	
	
	

}

7. Service와 ServiceImpl 코드 추가

package com.board.service;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardService {
	//게시물 목록
	public List<BoardVO> list() throws Exception;
	//게시물 작성
	public void write(BoardVO vo) throws Exception;
	//게시물 조회
	public BoardVO view(int bno) throws Exception;
	//게시물 수정
	public void modify(BoardVO vo) throws Exception;
	//게시물 삭제
	public void delete(int bno) throws Exception;
	//게시물 총 개수
	public int count() throws Exception;
	//게시물 목록 + 페이징
	public List listPage(int displayPost, int postNum) throws Exception;
	
}
package com.board.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.board.dao.BoardDAO;
import com.board.domain.BoardVO;

@Service
public class BoardServiceImpl implements BoardService {
	
	@Inject
	private BoardDAO dao;
	//게시물 리스트
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return dao.list();
	}
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		dao.write(vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return dao.view(bno);
	}
	//게시물 수정
	@Override
	public void modify(BoardVO vo) throws Exception {
		
		dao.modify(vo);
		
	}
	//게시물 삭제
	@Override
	public void delete(int bno) throws Exception {
		dao.delete(bno);
		
	}
	//게시물 총 개수
	@Override
	public int count() throws Exception {
		return dao.count();
	}
	//게시물 목록 + 페이징
	@Override
	public List listPage(int displayPost, int postNum) throws Exception {
		return dao.listPage(displayPost, postNum);
		
	}

}

8. BoardController 코드 추가

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
	
	//게시물 수정
	@RequestMapping(value = "/modify", method = RequestMethod.GET)
	public void getModify(@RequestParam("bno") int bno, Model model) throws Exception {
		
		BoardVO vo = service.view(bno);
		
		model.addAttribute("view", vo);
		
		System.out.println("view" + bno);
	}
	
	//게시물 수정
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String postModify(BoardVO vo) throws Exception{
		service.modify(vo);
		
		return "redirect:/board/view?bno=" + vo.getBno();
	}
	
	//게시물 삭제
	@RequestMapping(value = "/delete", method = RequestMethod.GET)
	public String getDelete(@RequestParam("bno") int bno) throws Exception{
		
		service.delete(bno);
		return "redirect:/board/list";
	}
	
	// 게시물 목록 + 페이징 추가
	@RequestMapping(value = "/listpage", method = RequestMethod.GET)
	public void getListPage(Model model, @RequestParam("name") int num) throws Exception {
	  
		//게시물 총 개수
		int count = service.count();
		
		// 한페이지에 출력할 게시물의 개수
		int postNum = 5;
		
		// 하단 페이징 번호 ([게시물 총 개수 / 한 페이지에 출력할 개수]의 올림)
		int pageNum = (int)Math.ceil((double)count/postNum);
		
		//출력할 게시물
		int displayPost = (num - 1) * postNum;
		
		List list = null;
		list = service.listPage(displayPost,  postNum);
		
		model.addAttribute("list", list);
		model.addAttribute("pageNum", pageNum);
 
	}
	
	
}

9. listPage.jsp 생성 후 코드 추가

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 목록</title>
</head>
<body>
<div id="nav">
	<%@ include file="../include/nav.jsp" %>
</div>
<table>
	<thead>
		<tr>
			<th>번호</th>
			<th>제목</th>
			<th>작성일</th>
			<th>작성자</th>
			<th>조회수</th>
		</tr>
	</thead>
		
	<tbody>
		<c:forEach items="${list}" var="list">
			<tr>
				<td>${list.bno}</td>
				<td>
					<a href="/board/view?bno=${list.bno}">${list.title}</a>
				</td>
				<td>${list.regDate}</td>
				<td>${list.writer}</td>
				<td>${list.viewCnt}</td>
			</tr>
		</c:forEach>
		
	</tbody>
</table>
<div>
 <c:forEach begin="1" end="${pageNum}" var="num">
    <span>
     <a href="/board/listPage?num=${num}">${num}</a>
  </span>
 </c:forEach>
</div>
</body>
</html>

10 nav.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<ul>
	<li><a href="/board/listPage?num=1">글 목록(페이징)</a></li>
	
	<li><a href="/board/list">글 목록</a></li>

	<li><a href="/board/write">글 작성</a></li>
</ul>

 

 

 

출처는 쿠주로님입니다.

다시한번 감사드립니다.

kuzuro.blogspot.com

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. view.jsp에서 게시물 수정 옆에 게시물 삭제를 추가해주겠습니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 조회</title>
</head>
<body>
<div id="nav">
	<%@ include file="../include/nav.jsp" %>
</div>
	<label>제목</label> ${view.title}
	<br />
	<label>작성자</label> ${view.writer}
	<br />
	<label>내용</label> ${view.content}
	
	<div>
		<a href="/board/modify?bno=${view.bno}">게시물 수정</a>
		<a href="/board/delete?bno=${view.bno}">게시물 삭제</a>
	</div>
	
</body>
</html>

2. BoardMapper에 쿼리 삭제 문을 추가하겠습니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.board.mappers.board">

	<!-- 게시물 목록 
	resultType은 쿼리를 실행한 뒤 결과가 있을 경우에 사용하며, 
	반대로 데이터를 넣을 때는 parameterType을 사용
	-->
	<select id="list" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, writer, regDate, viewCnt
		from tbl_board
	</select>
	
	<!-- 게시물 작성 
	데이터를 넣을 때는 parameterType을 사용
	-->
	<insert id="write" parameterType="com.board.domain.BoardVO">
		insert into
			tbl_board(title, content, writer)
				values(#{title}, #{content}, #{writer})
	</insert>
	
	<!--  게시물 조회 
	파라미터 타입은 매퍼에 들어오는 데이터, 리설트 타입은 매퍼가 내보내는 데이터입니다.-->
	<select id="view" parameterType="int" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, regDate, viewCnt
		from 
			tbl_board
			where
				bno = #{bno}
	</select>
	<!-- 게시물 수정 -->
	<update id="modify" parameterType="com.board.domain.BoardVO">
		update tbl_board
			set
				title = #{title},
				content = #{content},
				writer = #{writer}
			where bno = #{bno}
	</update>
	
	<!-- 게시물 삭제 -->
	<delete id="delete" parameterType="int">
		delete
			from tbl_board
		where bno = #{bno}
	</delete>
	
</mapper>

3. DAO와 DAOImpl에 게시물 번호를 받아와 매퍼에 코딩한 delete를 실행하도록 합니다.

package com.board.dao;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardDAO {
		
		//게시물 목록
		public List<BoardVO> list() throws Exception;
		
		//게시물 작성
		public void write(BoardVO vo) throws Exception;
		
		//게시물 조회
		public BoardVO view(int bno) throws Exception;
		
		//게시물 수정
		public void modify(BoardVO vo) throws Exception;
		
		//게시물 삭제
		public void delete(int bno) throws Exception;
}
package com.board.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.board.domain.BoardVO;

// DAO에 특화된 어노테이션. @Component 어노테이션을 써도 상관 없지만, DAO 클래스들에 @Repository 어노테이션을 사용함으로써
// @Component 어노테이션이 가진 특성과 함께, DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로
// 처리할 수 있는 장점 또한 갖는다.
@Repository
public class BoardDAOImpl implements BoardDAO {
	
//	name으로 DI를 가능케 한다. 자바에서 지원하는 어노테이션이며 프레임워크에 종속적이지 않아 상사용해도 좋다.
//	타입으로 연결한다.
	@Inject
	private SqlSession sql;
	
	private static String namespace = "com.board.mappers.board";
	
	//게시물 목록
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return sql.selectList(namespace + ".list");
	}
	
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		
		sql.insert(namespace + ".write", vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return sql.selectOne(namespace + ".view", bno);
		
	}
	//게시물 수정
	@Override
	public void modify(BoardVO vo) throws Exception {
		sql.update(namespace + ".modify", vo);
		
	}

	@Override
	public void delete(int bno) throws Exception {
		sql.delete(namespace + ".delete", bno);
		
	}
	
	
	

}

4. BoardService와 BoardService에서 코드를 추가해줍니다.

package com.board.service;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardService {
	//게시물 목록
	public List<BoardVO> list() throws Exception;
	//게시물 작성
	public void write(BoardVO vo) throws Exception;
	//게시물 조회
	public BoardVO view(int bno) throws Exception;
	//게시물 수정
	public void modify(BoardVO vo) throws Exception;
	//게시물 삭제
	public void delete(int bno) throws Exception;
	
}
package com.board.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.board.dao.BoardDAO;
import com.board.domain.BoardVO;

@Service
public class BoardServiceImpl implements BoardService {
	
	@Inject
	private BoardDAO dao;
	//게시물 리스트
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return dao.list();
	}
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		dao.write(vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return dao.view(bno);
	}
	//게시물 수정
	@Override
	public void modify(BoardVO vo) throws Exception {
		
		dao.modify(vo);
		
	}
	//게시물 삭제
	@Override
	public void delete(int bno) throws Exception {
		dao.delete(bno);
		
	}

}

5. Controller 에 코드를 추가합니다.

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
	
	//게시물 수정
	@RequestMapping(value = "/modify", method = RequestMethod.GET)
	public void getModify(@RequestParam("bno") int bno, Model model) throws Exception {
		
		BoardVO vo = service.view(bno);
		
		model.addAttribute("view", vo);
		
		System.out.println("view" + bno);
	}
	
	//게시물 수정
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String postModify(BoardVO vo) throws Exception{
		service.modify(vo);
		
		return "redirect:/board/view?bno=" + vo.getBno();
	}
	
	//게시물 삭제
	@RequestMapping(value = "/delete", method = RequestMethod.GET)
	public String getDelete(@RequestParam("bno") int bno) throws Exception{
		
		service.delete(bno);
		return "redirect:/board/list";
	}
}

6. 실행해서 삭제를 하면 정상적으로 삭제가 됩니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. board/include 폴더 생성

2. board/include/nav.jsp 파일 생성

3. nav.jsp 코드 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<ul> 
 <li>
  <a href="/board/list">글 목록</a> 
 </li>
 
 <li>
  <a href="/board/write">글 작성</a> 
 </li> 
</ul>

4. list.jsp, modify.jsp, view.jsp, write.jsp <body>태그 바로 밑에 코드 추가

<div id="nav">
	<%@ include file="../include/nav.jsp" %>
</div>

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. views/board/modify.jsp 생성 (수정할 페이지 만들기 )

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 수정</title>
</head>
<body>

	<form method="post">
		<label>제목</label>
		<input type="text" name="title" /><br />
		
		<label>작성자</label>
		<input type="text" name="writer" /><br />
		
		<label>내용</label>
		<textarea cols="50" rows="5" name="content"></textarea><br />
		
		<button type="submit">완료</button>
	
	</form>
</body>
</html>

2. BoardController 수정 코드 추가

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
	
	//게시물 수정
	@RequestMapping(value = "/modify", method = RequestMethod.GET)
	public void getModify() throws Exception {
		
	}
}

3. view.jsp 에서 수정 페이지로 이동할 수 있도록 태그 추가

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 조회</title>
</head>
<body>

	<label>제목</label> ${view.title}
	<br />
	<label>작성자</label> ${view.writer}
	<br />
	<label>내용</label> ${view.content }
	
	<div>
		<a href="/board/modify?bno=${view.bno}">게시물 수정</a>
	</div>
</body>
</html>

4. BoardController 에서 코드 추가

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
	
	//게시물 수정
	@RequestMapping(value = "/modify", method = RequestMethod.GET)
	public void getModify(@RequestParam("bno") int bno, Model model) throws Exception {
		
		BoardVO vo = service.view(bno);
		
		model.addAttribute("view", vo);
	}
}

5. modify.jsp에서 코드 추가

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 수정</title>
</head>
<body>

	<form method="post">
		<label>제목</label>
		<input type="text" name="title" value="${view.title}" /><br />
		
		<label>작성자</label>
		<input type="text" name="writer" value="${view.writer}"/><br />
		
		<label>내용</label>
		<textarea cols="50" rows="5" name="content">${view.content }</textarea><br />
		
		<button type="submit">완료</button>
	
	</form>
</body>
</html>

6. boardMapper.xml 에 수정용 쿼리 추가

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.board.mappers.board">

	<!-- 게시물 목록 
	resultType은 쿼리를 실행한 뒤 결과가 있을 경우에 사용하며, 
	반대로 데이터를 넣을 때는 parameterType을 사용
	-->
	<select id="list" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, writer, regDate, viewCnt
		from tbl_board
	</select>
	
	<!-- 게시물 작성 
	데이터를 넣을 때는 parameterType을 사용
	-->
	<insert id="write" parameterType="com.board.domain.BoardVO">
		insert into
			tbl_board(title, content, writer)
				values(#{title}, #{content}, #{writer})
	</insert>
	
	<!--  게시물 조회 
	파라미터 타입은 매퍼에 들어오는 데이터, 리설트 타입은 매퍼가 내보내는 데이터입니다.-->
	<select id="view" parameterType="int" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, regDate, viewCnt
		from 
			tbl_board
			where
				bno = #{bno}
	</select>
	<!-- 게시물 수정 -->
	<update id="modify" parameterType="com.board.domain.BoardVO">
		update tbl_board
			set
				title = #{title},
				content = #{content},
				writer = #{writer}
			where bno = #{bno}
	</update>
	
</mapper>

7. BoardDAO, BoardDAOImpl 코드 추가

package com.board.dao;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardDAO {
		
		//게시물 목록
		public List<BoardVO> list() throws Exception;
		
		//게시물 작성
		public void write(BoardVO vo) throws Exception;
		
		//게시물 조회
		public BoardVO view(int bno) throws Exception;
		
		//게시물 수정
		public void modify(BoardVO vo) throws Exception;
}
package com.board.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.board.domain.BoardVO;

// DAO에 특화된 어노테이션. @Component 어노테이션을 써도 상관 없지만, DAO 클래스들에 @Repository 어노테이션을 사용함으로써
// @Component 어노테이션이 가진 특성과 함께, DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로
// 처리할 수 있는 장점 또한 갖는다.
@Repository
public class BoardDAOImpl implements BoardDAO {
	
//	name으로 DI를 가능케 한다. 자바에서 지원하는 어노테이션이며 프레임워크에 종속적이지 않아 상사용해도 좋다.
//	타입으로 연결한다.
	@Inject
	private SqlSession sql;
	
	private static String namespace = "com.board.mappers.board";
	
	//게시물 목록
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return sql.selectList(namespace + ".list");
	}
	
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		
		sql.insert(namespace + ".write", vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return sql.selectOne(namespace + ".view", bno);
		
	}

	@Override
	public void modify(BoardVO vo) throws Exception {
		sql.update(namespace + ".modify", vo);
		
	}
	
	
	

}

8. BoardService, BoardServiceImpl 코드 추가

package com.board.service;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardService {
	//게시물 목록
	public List<BoardVO> list() throws Exception;
	//게시물 작성
	public void write(BoardVO vo) throws Exception;
	//게시물 조회
	public BoardVO view(int bno) throws Exception;
	//게시물 수정
	public void modify(BoardVO vo) throws Exception;
}
package com.board.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.board.dao.BoardDAO;
import com.board.domain.BoardVO;

@Service
public class BoardServiceImpl implements BoardService {
	
	@Inject
	private BoardDAO dao;
	//게시물 리스트
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return dao.list();
	}
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		dao.write(vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return dao.view(bno);
	}
	@Override
	public void modify(BoardVO vo) throws Exception {
		
		dao.modify(vo);
		
	}

}

9. BoardController에서 수정 POST 코드 추가

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
	
	//게시물 수정
	@RequestMapping(value = "/modify", method = RequestMethod.GET)
	public void getModify(@RequestParam("bno") int bno, Model model) throws Exception {
		
		BoardVO vo = service.view(bno);
		
		model.addAttribute("view", vo);
		
		System.out.println("view" + bno);
	}
	
	//게시물 수정
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String postModify(BoardVO vo) throws Exception{
		service.modify(vo);
		
		return "redirect:/board/view?bno=" + vo.getBno();
	}
}

 

출처 :  https://kuzuro.blogspot.com/2019/08/7.html

 

수정이 됩니다.

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. board/view.jsp 생성

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 조회</title>
</head>
<body>
	<form method="post">
		<label>제목</label>
		<input type="text" name="title" /><br />
		
		<label>작성자</label>
		<input type="text" name="writer" /><br />
		
		<label>내용</label>
		<textarea cols="50" rows="5" name="content"></textarea>
	</form>
</body>
</html>

2. BoardController 게시물 조회 메소드 작성

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회용 get 메서드
	@RequestMapping(value="/view", method = RequestMethod.GET)
	public void getView() throws Exception{
		
	}
}

3. list.jsp에 추가

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 목록</title>
</head>
<body>

<table>
	<thead>
		<tr>
			<th>번호</th>
			<th>제목</th>
			<th>작성일</th>
			<th>작성자</th>
			<th>조회수</th>
		</tr>
	</thead>
		
	<tbody>
		<c:forEach items="${list}" var="list">
			<tr>
				<td>${list.bno}</td>
				<td>
					<a href="/board/view?bno=${list.bno}">${list.title}</a>
				</td>
				<td>${list.regDate}</td>
				<td>${list.writer}</td>
				<td>${list.viewCnt}</td>
			</tr>
		</c:forEach>
		
	</tbody>
</table>
</body>
</html>

4. boradMapper.xml에 쿼리 추가

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.board.mappers.board">

	<!-- 게시물 목록 
	resultType은 쿼리를 실행한 뒤 결과가 있을 경우에 사용하며, 
	반대로 데이터를 넣을 때는 parameterType을 사용
	-->
	<select id="list" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, writer, regDate, viewCnt
		from tbl_board
	</select>
	
	<!-- 게시물 작성 
	데이터를 넣을 때는 parameterType을 사용
	-->
	<insert id="write" parameterType="com.board.domain.BoardVO">
		insert into
			tbl_board(title, content, writer)
				values(#{title}, #{content}, #{writer})
	</insert>
	
	<!--  게시물 조회 -->
	<select id="view" parameterType="int" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, regDate, viewCnt
		from 
			tbl_board
			where
				bno = #{bno}
	</select>
	
	
</mapper>

5. BoardDAO와 BoardDAOImpl에 코드 추가

package com.board.dao;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardDAO {
		
		//게시물 목록
		public List<BoardVO> list() throws Exception;
		
		//게시물 작성
		public void write(BoardVO vo) throws Exception;
		
		//게시물 조회
		public BoardVO view(int bno) throws Exception;
}
package com.board.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.board.domain.BoardVO;

// DAO에 특화된 어노테이션. @Component 어노테이션을 써도 상관 없지만, DAO 클래스들에 @Repository 어노테이션을 사용함으로써
// @Component 어노테이션이 가진 특성과 함께, DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로
// 처리할 수 있는 장점 또한 갖는다.
@Repository
public class BoardDAOImpl implements BoardDAO {
	
//	name으로 DI를 가능케 한다. 자바에서 지원하는 어노테이션이며 프레임워크에 종속적이지 않아 상사용해도 좋다.
//	타입으로 연결한다.
	@Inject
	private SqlSession sql;
	
	private static String namespace = "com.board.mappers.board";
	
	//게시물 목록
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return sql.selectList(namespace + ".list");
	}
	
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		
		sql.insert(namespace + ".write", vo);
		
	}
	//게시물 조회
	@Override
	public BoardVO view(int bno) throws Exception {
		
		return sql.selectOne(namespace + ".view", bno);
		
	}
	
	
	

}

6. BoardService와 BoardServiceImpl에 코드 추가

package com.board.service;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardService {
	//게시물 목록
	public List<BoardVO> list() throws Exception;
	//게시물 작성
	public void write(BoardVO vo) throws Exception;
	//게시물 조회
	public BoardVO view(int bno) throws Exception;
	
}

 

7. BoardController 에 코드 추가

주소에 있는 특정한 값을 가져와 int bno에 넣어줍니다.

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성 (서버에서 사용자로 데이터 이동 GET메서드)
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성 (사용자에서 서버로 데이터 이동 POST메서드
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
	
	//게시물 조회
	@RequestMapping(value= "/view", method = RequestMethod.GET)
	public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
		BoardVO vo = service.view(bno);
		model.addAttribute("view", vo);
	}
}

8. view.jsp에 코드추가

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 조회</title>
</head>
<body>
	<form method="post">
		<label>제목</label>
		${view.title }<br />
		
		<label>작성자</label>
		${view.writer}<br />
		
		<label>내용</label>
		${view.content }
	</form>
</body>
</html>

9. 목록에서 제목을 클릭 하시면

아래와 같은 내용이 나옵니다.

 

출처

https://kuzuro.blogspot.com/2019/08/6.html

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. home.jsp 

메인 화면에서 게시물 작성하기를 링크해주겠습니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
<p><a href="/board/list">게시물 목록</a></p>
<p><a href="/board/write">게시물 작성</a>
</body>
</html>

 

2. 게시판 글 작성 화면 views/board/write.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 작성</title>
</head>
<body>

</body>
</html>

 

3.BoardController 클래스

package com.board.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.board.domain.BoardVO;
import com.board.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	@Inject
	BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public void getList(Model model) throws Exception {
	
		List<BoardVO> list = null;
		list = service.list();
		
		model.addAttribute("list", list);
	}
	// 게시물 작성
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public void getWrite() throws Exception{
		
	}
	
	//게시물 작성
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String postWrite(BoardVO vo) throws Exception{
		service.write(vo);
		
		return "redirect:/board/list";
	}
}

4. 게시판 글 작성 화면 views/board/write.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 작성</title>
</head>
<body>

<form method="post">
	<label>제목</label>
	<input type="text" name="title" /><br />
	
	<label>작성자</label>
	<input type="text" name="writer" /><br />
	
	<label>내용</label>
	<textarea cols="50" rows="5" name="content"></textarea>
	
	<button type="submit">작성</button>
</form>
</body>
</html>

 

5.boardMapper.xml에 insert문 삽입

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.board.mappers.board">

	<!-- 게시물 목록 
	resultType은 쿼리를 실행한 뒤 결과가 있을 경우에 사용하며, 
	반대로 데이터를 넣을 때는 parameterType을 사용
	-->
	<select id="list" resultType="com.board.domain.BoardVO">
		select
			bno, title, content, writer, regDate, viewCnt
		from tbl_board
	</select>
	
	<!-- 게시물 작성 
	데이터를 넣을 때는 parameterType을 사용
	-->
	<insert id="write" parameterType="com.board.domain.BoardVO">
		insert into
			tbl_board(title, content, writer)
				values(#{title}, #{content}, #{writer})
	</insert>
	
	
</mapper>

6. DAO에 게시물 등록 메서드 추가

BoardDAO인터페이스

package com.board.dao;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardDAO {
		
		//게시물 목록
		public List<BoardVO> list() throws Exception;
		
		//게시물 작성
		public void write(BoardVO vo) throws Exception;
}

BoardDAOImpl

package com.board.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.board.domain.BoardVO;

// DAO에 특화된 어노테이션. @Component 어노테이션을 써도 상관 없지만, DAO 클래스들에 @Repository 어노테이션을 사용함으로써
// @Component 어노테이션이 가진 특성과 함께, DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로
// 처리할 수 있는 장점 또한 갖는다.
@Repository
public class BoardDAOImpl implements BoardDAO {
	
//	name으로 DI를 가능케 한다. 자바에서 지원하는 어노테이션이며 프레임워크에 종속적이지 않아 상사용해도 좋다.
//	타입으로 연결한다.
	@Inject
	private SqlSession sql;
	
	private static String namespace = "com.board.mappers.board";
	
	//게시물 목록
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return sql.selectList(namespace + ".list");
	}
	
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		
		sql.insert(namespace + ".write", vo);
		
	}

}

7.

BoardService

package com.board.service;

import java.util.List;

import com.board.domain.BoardVO;

public interface BoardService {
	//게시물 목록
	public List<BoardVO> list() throws Exception;
	//게시물 작성
	public void write(BoardVO vo) throws Exception;
}

BoardServiceImpl

package com.board.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.board.dao.BoardDAO;
import com.board.domain.BoardVO;

@Service
public class BoardServiceImpl implements BoardService {
	
	@Inject
	private BoardDAO dao;
	//게시물 리스트
	@Override
	public List<BoardVO> list() throws Exception {
		// TODO Auto-generated method stub
		return dao.list();
	}
	//게시물 작성
	@Override
	public void write(BoardVO vo) throws Exception {
		dao.write(vo);
		
	}

}

 

8. 실행하셔서 게시물 작성을 누르시면 게시물이 등록이 되고 출력이 되는 것을 알 수 있습니다.

반응형
블로그 이미지

꽃꽂이하는개발자

,