오늘의 노래!!!
- 아티스트
- 기리보이, 서출구, 양홍원
- 앨범
- 고등래퍼 지역대항전 Part.2
- 발매일
- 1970.01.01

JSP문 확인!!!
[1] index.jsp 가장 메인 확면에 나타내주는 jsp문이당!
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Board_Index</title>
</head>
<body>
<h1>
게시판 프로젝트
<!-- Member 프로젝트에서 했던 기능
[1] 회원가입 <> 게시글 작성 / 게시글 번호 추가
[2] 로그인 / 로그아웃 <>
[3] 회원목록 <> 게시글 목록 / 페이징 처리
[4] 회원정보 <> 게시글 상세보기 / 조회수 증가
[5] 회원수정 <> 게시글 수정
[6] 회원삭제 <> 게시글 삭제
작성 번튼 id = write : writeForm
목록 버튼 id = list : boardList
-->
</h1>
<button id="write">게시글 작성</button>
<button id="list">게시글 목록</button>
<button id="pList">페이징 목록</button>
</body>
<script src="https://code.jquery.com/jquery-3.6.4.js"
integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E="
crossorigin="anonymous">
</script>
<script>
$('#write').click(function() {
location.href = "writeForm";
});
$('#list').click(function() {
location.href = "boardList";
});
$('#pList').click(function() {
location.href = "pagingList";
});
</script>
</html>

[2] BoardModify.jsp
// 게시물 작성할 것에 대한 페이지를 불러와주는 코드
// 첨부파일에 무조건 사진이랑 파일 넣을것!!! >> 오류남..
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Board_Modify</title>
<link rel="stylesheet" href="./resources/css/table.css"/>
</head>
<body>
<form action="boardModify" method="POST" enctype="multipart/form-data">
<input type="hidden" name="bNum" value="${modify.BNum}"/>
<input type="hidden" name="bFileName" value="${modify.BFileName}"/>
<table>
<caption>게시글 작성</caption>
<tr>
<th>작성자</th>
<td><input type="text" name="bWriter" size="40" value="${modify.BWriter}"/></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="bPw" size="40"/></td>
</tr>
<tr>
<th>제목</th>
<td><input type="text" name="bTitle" size="40" value="${modify.BTitle}"/></td>
</tr>
<tr>
<th>내용</th>
<td><textarea rows="20" cols="40" name="bContent">${modify.BContent}</textarea></td>
</tr>
<tr>
<th>첨부파일</th>
<td><input type="file" name="bFile"/></td>
</tr>
<tr>
<th colspan="2">
<input type="submit" value="수정"/>
</th>
</tr>
</table>
</form>
</body>
</html>

// 등록 후 리스트로 나타내기
[3] BoardList.jsp
// 각각 의 리스트로 나타내어 제목에 클릭하면 상세내용을 확인할수 있도록 만든 코드!
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Board_List</title>
<link rel="stylesheet" href="./resources/css/table.css" />
<style>
</style>
</head>
<body>
<table>
<caption>게시글 목록</caption>
<tr>
<th>게시글 번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<c:forEach var="list" items="${bList}">
<tr>
<td>${list.BNum}</td>
<td><a href="boardView?bNum=${list.BNum}">${list.BTitle}</a></td>
<td>${list.BWriter}</td>
<td>${list.BDate}</td>
<td>${list.BHit}</td>
</tr>
</c:forEach>
</table>
</body>
</html>

[4] BoardView.jsp
// 상세내용을 확인할수 있도록 만든 코드!
// 파일을 폴더를 만들어서 거기안에서 파일을 확인 할 수 있도록 만들었다.
// 각 버튼에 수정 삭제 할수 있도록 또 다시 만들어 줬당!!
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Board_View</title>
<link rel="stylesheet" href="./resources/css/table.css" />
</head>
<body>
<table>
<caption>게시글 상세보기</caption>
<tr>
<th>번호</th>
<td>${view.BNum}</td>
</tr>
<tr>
<th>작성자</th>
<td>${view.BWriter}</td>
</tr>
<tr>
<th>비밀번호</th>
<td>${view.BPw}</td>
</tr>
<tr>
<th>제목</th>
<td>${view.BTitle}</td>
</tr>
<tr>
<th>내용</th>
<td>${view.BContent}</td>
</tr>
<tr>
<th>작성일</th>
<td>${view.BDate}</td>
</tr>
<tr>
<th>조회수</th>
<td>${view.BHit}</td>
</tr>
<tr>
<th>첨부파일</th>
<td><img src="./resources/fileUpload/${view.BFileName}"
width="200px" /></td>
</tr>
<tr>
<th colspan="2">
<button id="modify">수정</button>
<button id="delete">삭제</button>
</th>
</tr>
</table>
</body>
<!--
jQuery를 사용해서
[수정] 버튼을 누르면 modiForm으로 bNum의 정보를 가지고 이동
[삭제] 버튼을 누르면 boardDelete로 bNum의 정보를 가지고 이동
-->
<script src="https://code.jquery.com/jquery-3.6.4.js"
integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E="
crossorigin="anonymous">
</script>
<script>
$('#modify').click(function() {
let pw = '${view.BPw}';
let check = prompt('비밀번호를 입력해 주세요');
if (pw == check) {
location.href = "modiForm?bNum=${view.BNum}";
} else {
alert('비밀번호가 일치 하지않습니다');
}
});
$('#delete').click(function() {
let pw = '${view.BPw}';
let check = prompt('비밀번호를 입력해 주세요');
if (pw == check) {
location.href = "boardDelete?bNum=${view.BNum}";
} else {
alert('비밀번호가 일치 하지않습니다');
}
});
</script>
</html>

//수정버튼 클릭하면 수정할수 있는 코드
[5] BoardWrite.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Board_Write</title>
<link rel="stylesheet" href="./resources/css/table.css" />
</head>
<body>
<form action="boardWrite" method="POST" enctype="multipart/form-data">
<table>
<caption>게시글 작성</caption>
<tr>
<th>작성자</th>
<td><input type="text" name="bWriter" /></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="bPw" /></td>
</tr>
<tr>
<th>제목</th>
<td><input type="text" name="bTitle" /></td>
</tr>
<tr>
<th>내용</th>
<td><textarea rows="20" cols="40" name="bContent"></textarea></td>
</tr>
<tr>
<th>첨부파일</th>
<td><input type="file" name="bFile" /></td>
</tr>
<tr>
<th colspan="2"><input type="submit" value="등록"/></th>
</tr>
</table>
</form>
</body>
</html>
[6] PagingList.jsp
// 페이징목록을 따로 버튼을 만들어서 따른 페이지안에서 나타낸 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Paging_List</title>
<link rel="stylesheet" href="./resources/css/table.css" />
</head>
<body>
<table>
<caption>페이징 목록</caption>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<c:forEach var="list" items="${pList}">
<tr>
<td>${list.BNum}</td>
<td><a href="boardView?bNum=${list.BNum}">${list.BTitle}</a></td>
<td>${list.BWriter}</td>
<td>${list.BDate}</td>
<td>${list.BHit}</td>
</tr>
</c:forEach>
<tr>
<th colspan="5">
<!-- 페이징 처리 --> <!-- [이전] -->
<c:if test="${paging.page <= 1}">[이전]</c:if>
<c:if test="${paging.page > 1}">
<a href="pagingList?page=${paging.page -1}">[이전]</a>
</c:if> <!-- [페이지 번호] -->
<c:forEach var="i" begin="${paging.startPage}"
end="${paging.endPage}">
<c:if test="${paging.page == i}"> ${i} </c:if>
<c:if test="${paging.page != i}">
<a href="pagingList?page=${i}">${i}</a>
</c:if>
</c:forEach> <!-- [다음] -->
<c:if test="${paging.page >= paging.maxPage}">[다음]</c:if>
<c:if test="${paging.page < paging.maxPage}">
<a href="pagingList?page=${paging.page +1}">[다음]</a>
</c:if>
</th>
</tr>
<tr>
<td colspan="5">
<!-- 검색기능 -->
<form action="boardSearch" method="GET">
<!-- 카테고리 -->
<select name="category">
<option value="bTitle">제목</option>
<option value="bWriter">작성자</option>
<option value="bContent">내용</option>
</select>
<!-- 키워드 -->
<input type="text" name="keyword"/>
<!-- 검색버튼 -->
<input type="submit" value="검색"/>
</form>
</td>
</tr>
</table>
</body>
</html>

각 필요한 DTO 생성!!!
// @Data 자동생성lombok 생성하고, 각각 생성자 지정..
[1] BoardDTO.java
package com.icia.board.dto;
import java.sql.Date;
import org.springframework.web.multipart.MultipartFile;
import lombok.Data;
@Data
public class BoardDTO {
// 데이터베이스에 있는 BOARDTO 테이블을 보고 클래스 완성
// bd랑 같이 할 필요없다 따라서 bd형식만 맞쳐주면 된당!!
private int bNum;
private String bWriter;
private String bPw;
private String bTitle;
private String bContent;
private Date bDate;
private int bHit;
private MultipartFile bFile;
private String bFileName;
}
[2] PageDTO.java
package com.icia.board.dto;
import lombok.Data;
@Data
public class PageDTO {
private int page; // 현재페이지
private int maxPage; // 최대페이지
private int startPage; //시작페이지
private int endPage; // 마지막페이지
private int startRow; // 시작 행
private int endRow; // 마지막행
private int limit; // 한 페이지에 표현될 게시글 수
}
[3] SearchDTO.java
package com.icia.board.dto;
import lombok.Data;
@Data
public class SearchDTO {
private String category;
private String keyword;
}
그다음 바로 mybatis-config.xml지정!!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="com.icia.board.dto.BoardDTO" alias="board"/>
<typeAlias type="com.icia.board.dto.PageDTO" alias="paging"/>
<typeAlias type="com.icia.board.dto.SearchDTO" alias="search"/>
</typeAliases>
</configuration>
순서 기억하기!!!
Controller.java >> Service.java >> DAO >> Mapper
Controller.java
// [1] 프로젝트의 기본 화면 index화면을 나타내기 위한 기본코드
// [2] 게시글 페이지를 이동을 위해 BoardWrite로 이동하게 만든 코드
// [3] 게시글 작성!
// [4] 게시글 작성한걸 가지구 목록 페이지 이동 boardList
// [5] 페이징 목록 페이지 이동 코드
//@RequestParam
// value = 넘어오는 데이터 이름
// required = 필수 요소 확인
// defaultValue = 초기값
// [6] 게시글 상세보기 boardView
// [7 ~ 8] 게시글 수정 페이지 이동및 수정코드
// [9] 게시글 삭제!!
// [10] 게시글 검색!
package com.icia.board.controller;
import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.icia.board.dto.BoardDTO;
import com.icia.board.dto.SearchDTO;
import com.icia.board.service.BoardService;
@Controller //주소를 넘길 수 있게 해주는 애노테이션
public class BoardController {
private ModelAndView mav = new ModelAndView();
@Autowired
private BoardService bsvc;
// 프로젝트 홈 화면
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "index";
}
// writeForm : 게시글 작성페이지 이동
@RequestMapping(value = "/writeForm", method = RequestMethod.GET)
public String writeForm() {
return "BoardWrite";
}
// boardWrite : 게시글 작성
@RequestMapping(value = "/boardWrite", method = RequestMethod.POST)
public ModelAndView boardWrite(@ModelAttribute BoardDTO board) throws IOException {
System.out.println("[1] jsp > controller >> board : " +board);
mav = bsvc.boardWrite(board);
return mav;
}
// boardList : 게시글 목록페이지 이동
@RequestMapping(value = "/boardList", method = RequestMethod.GET)
public ModelAndView boardList() {
System.out.println("[1] jsp > controller >> board");
mav = bsvc.boardList();
return mav;
}
// pagingList : 페이징 목록페이지 이동
@RequestMapping(value = "/pagingList", method = RequestMethod.GET)
public ModelAndView pagingList(@RequestParam(value="page", required = false, defaultValue="1") int page) {
//@RequestParam
// value = 넘어오는 데이터 이름
// required = 필수 요소 확인
// defaultValue = 초기값
//pagingList?page = 3 : 넘어온 page값 적용
// pagingList >> page = 1 : 초기값 1적용
mav = bsvc.pagingList(page);
return mav;
}
// boardView : 게시글 상세보기
@RequestMapping(value = "/boardView", method = RequestMethod.GET)
public ModelAndView boardView(@RequestParam("bNum") int bNum) {
mav = bsvc.boardView(bNum);
return mav;
}
//modiForm : 게시글 수정페이지 이동
@RequestMapping(value="/modiForm", method = RequestMethod.GET)
public ModelAndView modiForm(@RequestParam("bNum") int bNum) {
mav = bsvc.modiForm(bNum);
return mav;
}
// boardModify : 게시글 수정
@RequestMapping(value="/boardModify", method = RequestMethod.POST)
public ModelAndView boardModify(@ModelAttribute BoardDTO board) throws IllegalStateException, IOException {
mav = bsvc.boardModify(board);
return mav;
}
// boardDelete : 게시글 삭제
@RequestMapping(value="/boardDelete", method = RequestMethod.GET)
public ModelAndView boardDelete(@RequestParam("bNum") int bNum) {
mav = bsvc.boardDelete(bNum);
return mav;
}
// boardSearch : 게시글 검색
@RequestMapping(value="/boardSearch", method = RequestMethod.GET)
public ModelAndView boardSearch(@ModelAttribute SearchDTO search) {
mav = bsvc.boardSearch(search);
return mav;
}
}
Service.java
// 리소스 안에 fileUploed를 생성해서 게시글에 제시한 첨부파일에 등록이된다.
// [1] 파일정보 가져와서 설정하기!
// [2] 게시물 작성한걸 controller에서 받아 dao 넘기는 작업
package com.icia.board.service;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.icia.board.dao.BoardDAO;
import com.icia.board.dto.BoardDTO;
import com.icia.board.dto.PageDTO;
import com.icia.board.dto.SearchDTO;
@Service
public class BoardService {
private ModelAndView mav;
@Autowired
private BoardDAO bdao;
public ModelAndView boardWrite(BoardDTO board) throws IOException {
System.out.println("[2] controller > service >> board : " + board);
mav = new ModelAndView();
// 서비스에서 할일!!!
// (1) 파일정보를 가져오기
MultipartFile bFile = board.getBFile();
// (2) 파일이름 설정하기
UUID uuid = UUID.randomUUID();
/* System.out.println("uuid 확인" + uuid.toString().substring(0,8)); */
/* System.out.println("실제 파일 이름 : " + bFile.getOriginalFilename()); */
// (3) 업로드한 파일이 존재한다면(!없다면)
if (!bFile.getOriginalFilename().isEmpty()) {
// (4) 랜덤한 식별문자 uuid + 실제파일 이름
String fileName = uuid.toString().substring(0, 8) + "_" + bFile.getOriginalFilename();
// (5) board 객체의 bfileName에 새로운 이름 저장한다.
board.setBFileName(fileName);
// (6) 저장경로 설정 : fileUpload 폴더 생성
String savePath = "I:/springWorkspace/Board/src/main/webapp/resources/fileUpload/";
System.out.println("저장 경로 확인 : " + savePath);
bFile.transferTo(new File(savePath + fileName));
} else {
System.out.println("파일첨부 x");
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////// ↓
//////////////////////////////////////////////////////////////////////////////////////////////////////////// 정보
//////////////////////////////////////////////////////////////////////////////////////////////////////////// 입력할
//////////////////////////////////////////////////////////////////////////////////////////////////////////// 내용
int result = bdao.boardWrite(board);
if (result > 0) {
mav.setViewName("index");
} else {
mav.setViewName("BoardWrite");
}
return mav;
}
public ModelAndView boardList() {
System.out.println("[2] controller >> serivce ");
mav = new ModelAndView();
List<BoardDTO> bList = bdao.boardList();
mav.addObject("bList", bList);
mav.setViewName("BoardList");
return mav;
}
public ModelAndView boardView(int bNum) {
mav = new ModelAndView();
BoardDTO board = bdao.boardView(bNum);
// DAO에서 불러온다 이제 mav를 넣어준다
mav.setViewName("BoardView");
mav.addObject("view", board);
return mav;
}
public ModelAndView modiForm(int bNum) {
mav = new ModelAndView();
BoardDTO board = bdao.boardView(bNum);
// DAO에서 불러온다 이제 mav를 넣어준다
mav.setViewName("BoardModify");
mav.addObject("modify", board);
return mav;
}
public ModelAndView boardModify(BoardDTO board) throws IOException {
System.out.println("[2] controller > service >> board : " + board);
mav = new ModelAndView();
// (0) 기존에 있던 파일 지우기
String deleteFileName = board.getBFileName();
// 저장경로 설정 : fileUpload 폴더 생성
String savePath = "I:/springWorkspace/Board/src/main/webapp/resources/fileUpload/";
// 기존 파일 설정
File deleteFile = new File(savePath + deleteFileName);
// 파일 존재여부 확인
if (deleteFile.exists()) {
System.out.println("파일존재");
// 파일 존재시 삭제
deleteFile.delete();
} else {
System.out.println("파일존재하지 않음");
}
// 서비스에서 할일!!!
// (1) 파일정보를 가져오기
MultipartFile bFile = board.getBFile();
// (2) 파일이름 설정하기
UUID uuid = UUID.randomUUID();
/* System.out.println("uuid 확인" + uuid.toString().substring(0,8)); */
/* System.out.println("실제 파일 이름 : " + bFile.getOriginalFilename()); */
// (3) 업로드한 파일이 존재한다면(!없다면)
if (!bFile.getOriginalFilename().isEmpty()) {
// (4) 랜덤한 식별문자 uuid + 실제파일 이름
String fileName = uuid.toString().substring(0, 8) + "_" + bFile.getOriginalFilename();
// (5) board 객체의 bfileName에 새로운 이름 저장한다.
board.setBFileName(fileName);
/////////////////////////////////////////////////////////////////
int result = bdao.boardModify(board);
if (result > 0) {
mav.setViewName("redirect:/boardView?bNum=" + board.getBNum());
} else {
mav.setViewName("redirect:/boardForm?bNum=" + board.getBNum());
}
}
return mav;
}
public ModelAndView boardDelete(int bNum) {
mav = new ModelAndView();
BoardDTO board = bdao.boardView(bNum);
int result = bdao.boardDelete(bNum);
if (result > 0) {
mav.setViewName("redirect:/boardList");
if (fileDelete(board.getBFileName())) {
System.out.println("파일삭제 성공!");
} else {
System.out.println("파일삭제 실패!");
}
} else {
mav.setViewName("redirect:/boardView?bNum=" + bNum);
}
return mav;
}
private boolean fileDelete(String bFileName) {
boolean result = false;
// 저장경로 설정 : fileUpload 폴더 생성
String savePath = "I:/springWorkspace/Board/src/main/webapp/resources/fileUpload/";
// 기존 파일 설정
File deleteFile = new File(savePath + bFileName);
// 파일 존재여부 확인
if (deleteFile.exists()) {
System.out.println("파일존재o");
// 파일 존재시 삭제
if (deleteFile.delete()) {
result = true;
}
} else {
System.out.println("파일존재x");
}
return result;
}
public ModelAndView pagingList(int page) {
mav = new ModelAndView();
// 한 화면에 보여줄 페이지 갯수
int block = 5;
// 한 화면에 보여줄 게시글 갯수
int limit = 5;
// 전체 게시글 갯수
int bCount = bdao.bCount();
// 최대페이지 : 2
int maxPage = (int) (Math.ceil((double) bCount / limit));
if (page > maxPage) {
page = maxPage;
}
// 시작 행
int startRow = (page - 1) * limit + 1;
// 끝난 행
int endRow = page * limit;
// 시작하는 페이지
int startPage = (((int) (Math.ceil((double) page / block))) - 1) * block + 1;
// 끝나는 페이지
int endPage = startPage + block - 1;
if (endPage > maxPage) {
endPage = maxPage;
}
// 페이지 객체 생성
PageDTO paging = new PageDTO();
paging.setPage(page);
paging.setStartPage(startRow);
paging.setEndRow(endRow);
paging.setMaxPage(maxPage);
paging.setStartPage(startPage);
paging.setEndPage(endPage);
paging.setLimit(limit);
// 페이징 목록 불러오기
List<BoardDTO> pList = bdao.pagingList(paging);
mav.addObject("paging", paging);
mav.addObject("pList", pList);
mav.setViewName("PagingList");
return mav;
}
public ModelAndView boardSearch(SearchDTO search) {
mav = new ModelAndView();
List<BoardDTO> sList = bdao.boardSearch(search);
mav.addObject("bList", sList);
mav.setViewName("BoardList");
return mav;
}
}
DAO
package com.icia.board.dao;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.icia.board.dto.BoardDTO;
import com.icia.board.dto.PageDTO;
import com.icia.board.dto.SearchDTO;
@Repository
public class BoardDAO {
@Autowired
private SqlSessionTemplate sql;
public int boardWrite(BoardDTO board) {
System.out.println("[3] service >> dao : ");
return sql.insert("Board.boardWrite", board);
}
public List<BoardDTO> boardList() {
System.out.println("[3] service >> dao : ");
return sql.selectList("Board.boardList");
}
public BoardDTO boardView(int bNum) {
// 조회수 증가 <조회수를 할수 있는 업데이트문을 작성하고 불러 올 수 있다!!>
sql.update("Board.boardHit", bNum);
// 게시글 한개의 정보(리턴)
return sql.selectOne("Board.boardView", bNum);
}
public int boardModify(BoardDTO board) {
return sql.update("Board.boardModify", board);
}
public int boardDelete(int bNum) {
return sql.delete("Board.boardDelete", bNum);
}
public int bCount() {
return sql.selectOne("Board.bCount");
}
public List<BoardDTO> pagingList(PageDTO paging) {
return sql.selectList("Board.pagingList", paging);
}
public List<BoardDTO> boardSearch(SearchDTO search) {
return sql.selectList("Board.searchList", search);
}
}
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="Board">
<!-- 검색목록 -->
<select id="searchList" parameterType="search" resultType="board">
SELECT * FROM BOARDTO WHERE ${category} LIKE '%${keyword}%'
</select>
<!-- 페이징 목록 -->
<select id="pagingList" parameterType="paging" resultType="board">
SELECT * FROM PAGINGLIST WHERE RN BETWEEN #{startRow} AND #{endRow}
</select>
<!-- 게시글 갯수 -->
<select id="bCount" resultType="int">
SELECT COUNT(*) FROM BOARDTO
</select>
<!-- 게시글 삭제 -->
<delete id="boardDelete" parameterType="int">
DELETE FROM BOARDTO WHERE
BNUM = #{bNum}
</delete>
<!-- 게시글 수정 -->
<update id="boardModify" parameterType="board">
UPDATE BOARDTO SET
BWRITER = #{bWriter}, BTITLE = #{bTitle}, BCONTENT =
#{bContent},
BFILENAME = #{bFileName} WHERE BNUM = #{bNum}
</update>
<!-- 게시글 상세보기 -->
<select id="boardView" parameterType="int" resultType="board">
SELECT *
FROM BOARDTO WHERE BNUM = #{bNum}
</select>
<!-- 조회수 증가 -->
<update id="boardHit" parameterType="int">
UPDATE BOARDTO SET BHIT =
BHIT + 1 WHERE BNUM = #{bNum}
</update>
<insert id="boardWrite" parameterType="board">
INSERT INTO BOARDTO
VALUES(BOARD_SEQ.NEXTVAL, #{bWriter}, #{bPw}, #{bTitle}, #{bContent},
SYSDATE, 0, #{bFileName})
</insert>
<select id="boardList" resultType="board">
SELECT * FROM BOARDTO ORDER BY
BNUM DESC
</select>
</mapper>
DB테이블 생성
--보드테이블 생성!!
dROP TABLE BOARDTO;
CREATE TABLE BOARDTO(
BNUM NUMBER PRIMARY KEY, --게시글 번호
BWRITER NVARCHAR2(20), --게시글 작성자
BPW NVARCHAR2(20), --게시글 비밀번호
BTITLE NVARCHAR2(50), --게시글 제목
BCONTENT NVARCHAR2(500), --게시글 내용
BDATE DATE, --게시글 작성일
BHIT NUMBER, --게시글 조회수
BFILENAME NVARCHAR2(60) --게시글 첨부파일
);
-- SEQUENCE : 자동 순차 증가라는 뜻
--생성방법은? : CREATE SEQUENCE [SEQ_NAME] START WITH [시작값] INCREAMENT BY [증가값];
--수정했을때? : ALTER SEQUENCE [SEQ_NAME] START WITH [시작값] INCREAMENT BY [증가값];
--삭제는? : DROP SEQUENCE[SEQ_NAME];
--하나씩 증가 : [SEQ_NAME].NEXTVAL;
--CREATE SEQUENCE TEST_SEQ START WITH 1;
--
--SELECT TEST_SEQ.NEXTVAL FROM DUAL;
CREATE SEQUENCE BOARD_SEQ START WITH 1 INCREMENT BY 1;
SELEcT * FROM BOARDTO;
--view : 임의의 테이블
--select : 가능, insertm update, delet불가!!!
create view PAGINGLIST AS SELECT
ROW_NUMBER() OVER(ORDER BY BNUM DESC) AS RN,
BOARDTO.*
FROM BOARDTO;
SELECT * FROM PAGINGLIST WHERE RN BETWEEN 1 AND 5;
SELECT * FROM BOARDTO WHERE BWRITER LIKE '%아저씨';
SELECT * FROM BOARDTO WHERE BTITLE LIKE '';
SELECT * FROM BOARDTO WHERE BCONTENT LIKE '%아저씨'
-- #{bWriter} >> ''
-- ${bTitle} >> ''없음
'IT코딩공부!' 카테고리의 다른 글
#38 스프링(Ajax쿼리문) (0) | 2023.06.01 |
---|---|
#37 스프링공부~ (MemBoard프로젝트①) 기본틀 (0) | 2023.05.31 |
#35 스프링(Board(게시판프로젝트, 어노테이션 기본개념!!) (0) | 2023.05.26 |
#34 스프링(spring) 공부중~! (0) | 2023.05.23 |
#33 스프링(spring) 시작!! (0) | 2023.05.22 |