실습(MVC(board))
- [Web_JSP] 17 이어서
1. BoardVO.java
package com.board.app.domain.vo;
public class BoardVO {
private int boardNumber;
private String boardTitle;
private String boardContent;
private int memberNumber;
private String boardDate;
private int readCount;
public BoardVO() {;}
public int getBoardNumber() {
return boardNumber;
}
public void setBoardNumber(int boardNumber) {
this.boardNumber = boardNumber;
}
public String getBoardTitle() {
return boardTitle;
}
public void setBoardTitle(String boardTitle) {
this.boardTitle = boardTitle;
}
public String getBoardContent() {
return boardContent;
}
public void setBoardContent(String boardContent) {
this.boardContent = boardContent;
}
public int getMemberNumber() {
return memberNumber;
}
public void setMemberNumber(int memberNumber) {
this.memberNumber = memberNumber;
}
public String getBoardDate() {
return boardDate;
}
public void setBoardDate(String boardDate) {
this.boardDate = boardDate;
}
public int getReadCount() {
return readCount;
}
public void setReadCount(int readCount) {
this.readCount = readCount;
}
}
2. BoardDTO.java
package com.board.app.domain.vo;
// 나는 기존 테이블의 컬럼의 변형 또는 이외의 연산이 있을 경우에는
// 클래스이름 뒤에 DTO를 붙이겠다.
public class BoardDTO {
private int boardNumber;
private String boardTitle;
private String boardContent;
private int memberNumber;
private String memberId;
private String boardDate;
private int readCount;
public BoardDTO() {;}
public BoardDTO(BoardVO boardVO) {
super();
this.memberNumber = boardVO.getMemberNumber();
this.boardNumber = boardVO.getBoardNumber();
this.boardTitle = boardVO.getBoardTitle();
this.boardContent = boardVO.getBoardContent();
this.boardDate = boardVO.getBoardDate();
this.readCount = boardVO.getReadCount();
}
public int getBoardNumber() {
return boardNumber;
}
public void setBoardNumber(int boardNumber) {
this.boardNumber = boardNumber;
}
public String getBoardTitle() {
return boardTitle;
}
public void setBoardTitle(String boardTitle) {
this.boardTitle = boardTitle;
}
public String getBoardContent() {
return boardContent;
}
public void setBoardContent(String boardContent) {
this.boardContent = boardContent;
}
public int getMemberNumber() {
return memberNumber;
}
public void setMemberNumber(int memberNumber) {
this.memberNumber = memberNumber;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getBoardDate() {
return boardDate;
}
public void setBoardDate(String boardDate) {
this.boardDate = boardDate;
}
public int getReadCount() {
return readCount;
}
public void setReadCount(int readCount) {
this.readCount = readCount;
}
}
3. BoardDAO.java
package com.board.app.domain.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.board.app.domain.vo.BoardDTO;
import com.board.app.domain.vo.BoardVO;
import com.mybatis.config.MyBatisConfig;
public class BoardDAO {
SqlSessionFactory sqlSessionFactory = MyBatisConfig.getSqlSessionFactory();
SqlSession sqlSession;
public BoardDAO() {
sqlSession = sqlSessionFactory.openSession(true);
}
//게시글 목록
public List<BoardDTO> selectAll(Map<String, Integer> boardMap) {
return sqlSession.selectList("Board.selectAll", boardMap);
}
//게시글 전체 개수
public int getTotal() {
return sqlSession.selectOne("Board.getTotal");
}
//게시글 정보 조회
public BoardDTO selectDetail(int boardNumber) {
return sqlSession.selectOne("Board.selectDetail", boardNumber);
}
//게시글 조회수 증가
public void updateReadCount(int boardNumber) {
sqlSession.update("Board.updateReadCount", boardNumber);
}
//최근 게시글 번호
public int getSeq() {
return sqlSession.selectOne("Board.getSeq");
}
//게시글 추가
public void insert(BoardVO board) {
sqlSession.insert("Board.insert", board);
}
//게시글 삭제
public void delete(int boardNumber) {
sqlSession.delete("Board.delete", boardNumber);
}
//게시글 수정
public void update(BoardVO board) {
sqlSession.update("Board.update", board);
}
}
4. BoardMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http//mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Board">
<select id="selectAll" parameterType="map" resultType="boardDTO">
select board_number, board_title, board_content, member_id, board_date, read_count
from tbl_board b join tbl_member m
on b.member_number = m.member_number
order by 1 desc limit #{startRow}, #{rowCount}
</select>
<!-- 게시글 전체 개수 -->
<select id="getTotal" resultType="_int">
select count(board_number) from tbl_board
</select>
<!-- 게시글 상세보기(전체 정보 조회) -->
<select id="selectDetail" parameterType="_int" resultType="boardDTO">
select board_number, board_title, board_content, b.member_number, member_id
from tbl_board b join tbl_member m
on b.member_number = m.member_number and board_number = #{boardNumber}
</select>
<!-- 조회수 -->
<update id="updateReadCount" parameterType="_int">
update tbl_board
set read_count = read_count + 1
where board_number = #{boardNumber}
</update>
<!-- 최근 게시글 번호 -->
<select id="getSeq" resultType="_int">
select board_number from tbl_board
order by 1 desc limit 0, 1
</select>
<!-- 게시글 작성 -->
<insert id="insert" parameterType="boardVO">
insert into tbl_board (board_title, board_content, member_number, board_date)
values(#{boardTitle}, #{boardContent}, #{memberNumber}, now())
</insert>
<!-- 게시글 삭제 -->
<delete id="delete" parameterType="_int">
delete from tbl_board where board_number = #{boardNumber}
</delete>
<!-- 게시글 수정 -->
<update id="update" parameterType="boardVO">
update tbl_board
set board_title=#{boardTitle}, board_content=#{boardContent}
where board_number = #{boardNumber}
</update>
</mapper>
5. FileVO.java
package com.board.app.domain.vo;
public class FileVO {
private String fileName;
private String fileNameOriginal;
private int boardNumber;
public FileVO() {;}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileNameOriginal() {
return fileNameOriginal;
}
public void setFileNameOriginal(String fileNameOrigianl) {
this.fileNameOriginal = fileNameOrigianl;
}
public int getBoardNumber() {
return boardNumber;
}
public void setBoardNumber(int boardNumber) {
this.boardNumber = boardNumber;
}
}
6. FileDAO.java
package com.board.app.domain.dao;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.board.app.domain.vo.BoardDTO;
import com.board.app.domain.vo.BoardVO;
import com.board.app.domain.vo.FileVO;
import com.mybatis.config.MyBatisConfig;
import com.oreilly.servlet.MultipartRequest;
public class FileDAO {
SqlSessionFactory sqlSessionFactory = MyBatisConfig.getSqlSessionFactory();
SqlSession sqlSession;
public FileDAO() {
sqlSession = sqlSessionFactory.openSession(true);
}
public void insert(MultipartRequest multipartRequest, int boardNumber) {
FileVO file = new FileVO();
//type="file"인 태그의 name 값들
Enumeration<String> files = multipartRequest.getFileNames();
while(files.hasMoreElements()) {
String name = files.nextElement();
//원본 파일 이름
String fileNameOriginal = multipartRequest.getOriginalFileName(name);
//중복 시 변경되는 이름
String fileName = multipartRequest.getFilesystemName(name);
if(fileName == null) {continue;}
file.setFileName(fileName);
file.setFileNameOriginal(fileNameOriginal);
file.setBoardNumber(boardNumber);
insert(file);
}
}
public void insert(FileVO fileVO) {
sqlSession.insert("File.insert", fileVO);
}
public void delete(int boardNumber) {
sqlSession.delete("File.delete", boardNumber);
}
public List<FileVO> select(int boardNumber){
return sqlSession.selectList("File.select", boardNumber);
}
}
7. FileDownloadOk.java
package com.board.app.board;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.board.app.action.Action;
import com.board.app.action.ActionInfo;
public class FileDownloadOk implements Action {
@Override
public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
String uploadPath = "D:\\web_1900_hds\\jsp\\workspace\\board\\WebContent\\upload";
String fileName = req.getParameter("fileName");
String fileNameOriginal = req.getParameter("fileNameOriginal");
InputStream inputStream = null;
OutputStream outputStream = null;
File file = null;
file = new File(uploadPath, fileName);
String fileNameToSend = new String(fileNameOriginal.getBytes("UTF-8"), "ISO-8859-1");
inputStream = new FileInputStream(file);
resp.setContentType("application/octet-stream");
resp.setHeader("Content-Description", "파일 다운로드");
resp.setHeader("Content-Disposition", "attachment;filename=\"" + fileNameToSend + "\"");
resp.setHeader("Content-Type", "application/octet-stream;charset=utf-8");
resp.setHeader("Content-Length", file.length() + "");
byte[] b = new byte[(int)file.length()];
int len = 0;
outputStream = resp.getOutputStream();
while((len = inputStream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
outputStream.close();
inputStream.close();
return null;
}
}
8. FileMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http//mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="File">
<!-- 첨부파일 추가 -->
<insert id="insert" parameterType="fileVO">
insert into tbl_file (file_name, file_name_original, board_number)
values(#{fileName}, #{fileNameOriginal}, #{boardNumber})
</insert>
<!-- 첨부파일 삭제 -->
<delete id="delete" parameterType="_int">
delete from tbl_file where board_number = #{boardNumber}
</delete>
<!-- 첨부파일 가져오기 -->
<select id="select" parameterType="_int" resultType="fileVO">
select file_name, file_name_original, board_number
from tbl_file
where board_number = #{boardNumber}
</select>
</mapper>
'웹 개발 > JSP' 카테고리의 다른 글
[Web_JSP] 20 (0) | 2022.06.08 |
---|---|
[Web_JSP] 19 (0) | 2022.06.07 |
[Web_JSP] 17 (0) | 2022.06.05 |
[Web_JSP] 16 (0) | 2022.06.04 |
[Web_JSP] 15 (0) | 2022.06.03 |