반응형

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. 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

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

to do list

1. 마리아db 설치할때 같이 설치된 Heidi를 실행한 후 루트 계정으로 접속을 합니다.

2. 새로운 계정과 데이터 베이스를 생성하고 부여합니다.

 

 

1. 루트 계정 접속 후 새로운 계정 만들기

계정을 생성하고 DB를 생성하고 soulwine이라는 계정에 board DB에 권한을 주었습니다.

commit 을 하고 DB가 만들어 졌는지 확인해 보겠습니다.

 

이제 계정을 만들어 주었으니 Heidi에 가서 파일 -> 세션 관리자로 들어가 봅니다.

아래에 신규를 클릭하고 아이디와 비밀번호를 적고 저장을 누릅니다.

그리고 세션 이름은 게시판을 만들거기 때문에 board로 수정해 주었습니다. 열기를 눌러주세요.

현재 만든 계정에서 DB를 사용하기 위해선 use 라는 명령어를 사용하며 use board;를 하여 board라는 데이터베이스를 사용하도록 하겠습니다.

이제 게시판을 위한 테이블을 생성해 보겠습니다.

 

위의 컬럼명은 아래와 같습니다.

 

bno : 게시물의 고유번호
title : 글의 제목
content : 게시물 내용
writer : 작성자
regDate : 작성일
viewCnt: 조회수

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

이클립스를 실행 하시고 new - project 를 하셔서 spring을 검색하셔서 Spring Legacy Project로 만듭니다.

Next를 하고 저는 프로젝트의 이름은 basicBoard로 하고 템플릿은 Spring MVC Project를 하였습니다.

Next

패키지 명은 com.board.controller로 하였습니다.

그 후에 finish를 해줍니다.

 

상단 메뉴에서 Window에 preferences를 클릭하고

general목록에서 workspace를 확인해 줍니다.

이후에는

상단의 Project에서 properties에서 

Text file encoding을 확인해 줍니다.

이제 project facets 로 들어가서 JAVA의 버전을 1.8로 바꿔주고 APPLY를 하겠습니다.

아래와 같이 web.xml에 문자 인코딩을 해주겠습니다.

<!-- 문자 인코딩 시작 -->
	
	<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>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

이제 아래의 views에 home.jsp 에 페이지 인코딩을 해주겠습니다.

현재 페이지의 인코딩을 UTF-8로 변경하는 코드입니다.

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

이제 pom.xml을 열고 pom.xml에서 Java의 버전이 1.6이고 프레임 워크의 버전이 3.1.1. 로 되어 있습니다.

Java의 버전을 1.8로 바꾸고 Spring Framework의 버전을 4.3.8 버전으로 변경 하겠습니다.

그 후에 프로젝트를 실행해 보면 

아래와 같은 화면이 나타나게 됩니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,