일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- java
- New Dialog
- 자바 개발환경준비
- innerclass
- Spring 개념
- Visuall code
- Spring 구조
- JDK 설치
- New Frame
- DB 설정
- Runnable
- 드림코딩
- inheritance
- Unbox
- pox.xml 오류
- Statement
- append()
- protected
- 오버로딩
- 톰켓
- Overloading
- singleton
- 싱글톤 패턴
- File
- 접근제한수식어
- tomat
- OuterClass
- 오라클 데이터베이스
- SPRING 특징
- spring 페이징
- Today
- Total
~홍~
Spring 게시판 (3) _ 게시판 전체리스트 / 글작성 / 게시물 상세 정보 / 게시글 수정 본문
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.spring.board.BoardMapper">
<!-- 컬럼이름 : mybatis-config.xml의 name
${컬럼이름} : DB 테이블의 열
#{컬럼이름} : 입력받은 데이터 -->
<!-- DB 쿼리 작성 -->
<!-- id : dao의 메소드와 연결하기 위해 사용 -->
<!-- 게시물 작성 -->
<insert id="board_insert">
insert into ${board} (${title}, ${content}, ${writer})
values (#{title}, #{content}, #{writer})
</insert>
<!-- 게시물 전체 리스트 -->
<select id="board_select_all" resultType="BoardVO">
select * from ${board}
order by ${bNo} desc
</select>
<!-- 게시물 상세 정보 -->
<select id="board_select_bNo" resultType="BoardVO">
select * from ${board}
where ${bNo} = #{bNo}
</select>
<!-- 게시물 수정 -->
<update id="board_update">
update ${board}
set ${title} = #{title}, ${writer} = #{writer}, ${content} = #{content}
where ${bNo} = #{bNo}
</update>
<!-- resultType : select를 했을때 리턴하는 레코드 타입 선언
- 일반적으로 패키지 이름을 포함한 전체경로의 클래스 이름을 사용해야함
- mybatis-config.xml에서 typeAliases 속성을 package로 정의하여 클래스 이름만 사용 -->
</mapper>
2. DAO 생성
- Java Resource >> src/main/java >> com.spring.board.persistence package 생성
- com.spring.board.persistence >> BoardDAO.java (interface)
BoardDAO
package com.spring.board.persistence;
import java.util.List;
import com.spring.board.domain.BoardVO;
public interface BoardDAO {
public abstract int insertBoard(BoardVO vo) throws Exception; // 게시글 작성
public abstract List<BoardVO> selectBoard() throws Exception; // 전체 리스트
public abstract BoardVO selectBoard(int bNo) throws Exception; // 게시글 정보 보기
public abstract int updateBoard(BoardVO vo) throws Exception; // 게시글 수정
} // end BoardDAO
3. DAOImple 생성
- Java Resource >> src/main/java >> com.spring.board.persistence >> BoardDAOImple.java
BoardDAOImple
package com.spring.board.persistence;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.spring.board.domain.BoardVO;
@Repository // @Component
//- 영속 계층(Persistence Layer)의 DB 관련 기능을 담당
//- Spring Component bean으로 등록함
//- 스프링 프레임워크가 bean을 생성하기 위해서는
//root-context.xml에 bean으로 등록해야함
//- <context:component-scan ... />
public class BoardDAOImple implements BoardDAO {
private static final Logger LOGGER =
LoggerFactory.getLogger(BoardDAOImple.class);
private static final String NAMESPACE =
"com.spring.board.BoardMapper";
// MyBatis의 SqlSession을 사용하기 위해서
// 스프링 프레임워크가 생성한 bean을 주입(injection)받음
@Autowired
private SqlSession sqlSession;
// 게시글 작성
@Override
public int insertBoard(BoardVO vo) throws Exception {
LOGGER.info("insertBoard() 호출");
return sqlSession.insert(NAMESPACE + ".board_insert", vo);
}
// 게시글 전체 리스트
@Override
public List<BoardVO> selectBoard() throws Exception {
LOGGER.info("selectBoard() 전체 리스트 호출");
return sqlSession.selectList(NAMESPACE + ".board_select_all");
}
// 게시글 정보 보기
@Override
public BoardVO selectBoard(int bNo) throws Exception {
LOGGER.info("selectBoard() 호출 : bNo = " + bNo);
return sqlSession.selectOne(NAMESPACE + ".board_select_bNo", bNo);
}
// 게시글 수정
@Override
public int updateBoard(BoardVO vo) throws Exception {
LOGGER.info("updateBoard() 호출 : vo = " + vo);
return sqlSession.update(NAMESPACE + ".board_update", vo);
}
} // end BoardDAOImple
4. Junit 테스트
- Java Resources >> src/test/java >> com.spring.board >> BoardDAOTest.java 생성
2021.04.05 - [Spring] - Junit test
Junit test
Java Resources >> src/test/java >> com.spring.board >> OracleJDBCTest.class 생성 - OracleJDBCTest.class / Junit 테이스 package com.spring.board; import java.sql.Connection; import java.sql.DriverM..
hong1991.tistory.com
5. Service 생성
- Java Resource >> src/main/java >> com.spring.board.service package 생성
- com.spring.board.service >> BoardService.java (interface) 생성
BoardService
package com.spring.board.service;
import java.util.List;
import com.spring.board.domain.BoardVO;
// CRUD(CREAD, READ, UPDATE, DELETE)
public interface BoardService {
public abstract int createBoard(BoardVO vo) throws Exception; // 게시글 작성
public abstract List<BoardVO> readBoard() throws Exception; // 게시글 전체 리스트
public abstract BoardVO readBoard(int bNo) throws Exception; // 게시판 번호로 선택 / 게시글 확인
public abstract int updateBoard(BoardVO vo) throws Exception; // 게시글 수정
} // end BoardService
6. ServiceImple 생성
- Java Resource >> src/main/java >> com.spring.board.service >> BoardServiceImple 생성
BoardServiceImple
package com.spring.board.service;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.spring.board.domain.BoardVO;
import com.spring.board.persistence.BoardDAO;
@Service
// @Component
//스프링 프레임워크에게 서비스 계층(Service/Business layer)의 컴퍼넌트임을 알려주는 어노테이션
public class BoardServiceImple implements BoardService {
private static final Logger LOGGER =
LoggerFactory.getLogger(BoardServiceImple.class);
@Autowired
private BoardDAO dao;
// 게시글 작성
@Override
public int createBoard(BoardVO vo) throws Exception {
LOGGER.info("createBoard() 호출");
return dao.insertBoard(vo);
}
// 게시글 전체 리스트
@Override
public List<BoardVO> readBoard() throws Exception {
LOGGER.info("readBoard() 전체리스트 호출");
return dao.selectBoard();
}
// 게시판 번호로 선택 / 게시글 정보 확인
@Override
public BoardVO readBoard(int bNo) throws Exception {
LOGGER.info("readBoard() 호출 : bNo : " + bNo);
return dao.selectBoard(bNo);
}
// 게시글 수정
@Override
public int updateBoard(BoardVO vo) throws Exception {
LOGGER.info("updateBoard() 호출");
return dao.updateBoard(vo);
}
} // end BoardServiceImple
7. Controller 생성
- Java Resource >> src/main/java >> com.spring.board.controller package 생성
- com.spring.board.controller >> BoardController 생성
BoardController
package com.spring.board.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.spring.board.domain.BoardVO;
import com.spring.board.service.BoardService;
@Controller
@RequestMapping(value = "/") // url : /board/
public class BoardController {
private static final Logger LOGGER =
LoggerFactory.getLogger(BoardController.class);
@Autowired
private BoardService boardService;
// 게시판 전체 리스트
@GetMapping("board/list")
public void list(Model model) throws Exception {
LOGGER.info("board list 호출");
List<BoardVO> list = boardService.readBoard();
model.addAttribute("boardList", list);
} // end list
// ---------------------------------------------------------
// 게시글 작성
@GetMapping("board/register")
public void getRegister() throws Exception {
LOGGER.info("board register GET 호출");
} // end getRegister
@PostMapping("board/register")
public String postRegister(BoardVO vo, RedirectAttributes reAttr) throws Exception {
LOGGER.info("board register POST 호출");
int result = boardService.createBoard(vo);
// "insert_result"의 키이름을 가진 데이터 전송
if (result == 1) { // DB insert 성공
reAttr.addFlashAttribute("insert_result", "success");
return "redirect:/board/list";
} else {
reAttr.addFlashAttribute("insert_result", "fail");
return "redirect:/board/register";
}
} // end postRegister
// ---------------------------------------------------------
// 게시물 상세 검색
@GetMapping("board/info")
public void GetInfo(Model model, @RequestParam("bNo") int bNo ) throws Exception {
LOGGER.info("board info 호출 : bNo = " + bNo);
BoardVO vo = boardService.readBoard(bNo);
model.addAttribute("boardVO", vo);
} // end GetInfo
// ---------------------------------------------------------
// 게시글 수정
@GetMapping("board/update")
public void GetUpdate(Model model, @RequestParam("bNo") int bNo) throws Exception {
LOGGER.info("Board update GET 호출 : bNo =" + bNo);
BoardVO vo = boardService.readBoard(bNo);
model.addAttribute("boardVO", vo);
} // end GetUpdate
@PostMapping("board/update")
public String postUpdate(BoardVO vo) throws Exception {
LOGGER.info("Board update POST 호출 : vo =" + vo);
int result = boardService.updateBoard(vo);
if (result == 1) {
return "redirect:/board/info?bNo=" + vo.getbNo();
} else {
return "redirect:/board/update?bNo=" + vo.getbNo();
}
}
} // end BoardController
8. Junit Test
- Java Resources >> src/test/java >> com.spring.board >> BoardControllerTest.java 생성
2021.04.05 - [Spring] - Junit test
9. JSP 생성
- src >> main >> webapp >> WEB-INF >> views >> board 파일 생성
- board >> list.jsp 생성 ( 전체리스트 )
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!-- jstl 라이브러리중 fmt(포맷) 라이브러리를 -->
<!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>
<th>조회수</th>
</tr>
</thead>
<tbody>
<c:forEach items="${boardList }" var="list">
<tr>
<td>${list.bNo }</td>
<td>
<a href="info?bNo=${list.bNo }">${list.title }</a>
</td>
<td>
<fmt:formatDate value="${list.bDate }" pattern="yyyy-MM-dd"/>
</td>
<td>${list.writer }</td>
<td>${list.replyCnt }</td>
<td>${list.viewCnt }</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
- board >> register.jsp 생성 ( 게시글 작성 )
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!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>
- board >> info.jsp 생성 ( 게시글 상세 정보 )
info.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시글 조회</title>
</head>
<body>
<form method="post">
<label>제목</label>
${boardVO.title }<br>
<label>작성자</label>
${boardVO.writer }<br>
<label>내용</label>
${boardVO.content }<br>
</form>
</body>
</html>
- board >> update.jsp 생성 ( 게시글 수정 )
update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 수정</title>
</head>
<body>
<form method="post">
<label>제목</label>
<input type="text" name="title" value="${boardVO.title }"><br>
<label>작성자</label>
<input type="text" name="writer" value="${boardVO.writer }"><br>
<label>내용</label>
<textarea cols="50" rows="5" name="content">${boardVO.content }</textarea>
<button type="submit">완료</button>
</form>
</body>
</html>
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"%>
<%@ page session="false" %>
<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>
<a href="board/register">게시물 작성</a>
</p>
</body>
</html>
'Spring > -' 카테고리의 다른 글
Spring 게시판 (5) _ 페이징 구현 (0) | 2021.04.09 |
---|---|
Spring 게시판 (4) _ nav, 게시글 삭제 (0) | 2021.04.08 |
Junit test (0) | 2021.04.05 |
Spring 게시판 (2) DB 테이블 생성 및 스프링 연결 (0) | 2021.04.04 |
스프링 게시판 만들기 ( 1 ) 기본 설정 (0) | 2021.04.04 |