이제 내가 그동안 작업해왔던 프로젝트에 첨부파일기능을 탑재할 차례이다.
첨부파일 정보를 위한 준비
첨부파일이 게시말과 합쳐지면 가장 먼저 진행해야 하는 일은 게시물과 첨부파일의 관계를 저장하는 테이블이 있어야한다.
게시물의 첨부파일은 각자 고유한 UUID를 가지고 있기 때문에 별도의 PK를 지정할 필요는 없지만, 게시물의 등록할 때 첨부파일의 테이블 역시 같이 insert 작업이 진행되어야 하므로 트랜잭션 처리가 필요하다.
첨부파일을 보관하는 테이블은 tbl_attack로 설계한다.
tbl_board는 tbl_reply와 이미 외래키의 관계를 가지고 있으므로 첨부파일이 추가되면 아래와 같은 구조가 된다.
create table tbl_attach (
uuid varchar2(500) not null,
uploadPath varchar2(300) not null,
fileName varchar2(100) not null,
filetype char(1) default 'I',
bno number(10,0)
);
alter table tbl_attach add constraint pk_attach primary key (uuid);
alter table tbl_attach add constraint fk_board_attach foreign key (bno) references tbl_board(bno);
첨부파일을 저장할 정보들을 담을 테이블이다.
uuid를 pk로 설정하였고, 게시글번호를 외래키로 가져오는 것으로 계획하였다.
파일정보를 처리하기 위해 파라미터를 여러개 사용해야함, 그래서 새로 VO클래스를 만들도록하자.

package org.study.domain;
import lombok.Data;
@Data
public class BoardAttachVO {
private String uuid;
private String uploadPath;
private String fileName;
private boolean fileType;
private Long bno;
}
VO클래스안에 는 보기와같이 넣는다. 컬럼과 동일하게 넣어주면 된다.
그리고 기존의 게시글을 담당하는 BoardVO에도 BoardAttatch 를 처리할 수있도록 넣어주자
package org.study.domain;
import java.util.Date;
import java.util.List;
import lombok.Data;
@Data
public class BoardVO {
private Long bno;
private String title;
private String content;
private String writer;
private Date regdate;
private Date updateDate;
private int replyCnt;
private List<BoardAttachVO> attachList;
}
크게 바뀐건없다 단지 밑에 List 를 넣어 주었다.
첨부파일 처리를 위한 Mapper처리
첨부파일 정보를 DB로 부터 이용해서 보관하므로, 이를 처리하는 SQL을 Mapper와 XML을 작성해서 처리하자

package org.study.mapper;
import java.util.List;
import org.study.domain.BoardAttachVO;
public interface BoardAttachMapper {
public void insert(BoardAttachVO vo);
public void delete(String uuid);
public List<BoardAttachVO> findByBno(Long bno);
public void deleteAll(Long bno);
public List<BoardAttachVO> getOldFiles();
}
그리고 마이바티스를 이용할 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="org.study.mapper.BoardAttachMapper">
<insert id="insert">
insert into tbl_attach (uuid, uploadpath, filename,
filetype, bno)
values (#{uuid}, #{uploadPath}, #{fileName},
#{fileType}, #{bno} )
</insert>
<delete id="delete">
delete from tbl_attach where uuid = #{uuid}
</delete>
<select id="findByBno"
resultType="org.study.domain.BoardAttachVO">
select * from tbl_attach where bno = #{bno}
</select>
</mapper>
를 넣어주자,. 등록하는 insert 문과 uuid를 이용하는 deletee문, 그리고
select를 통해 해당 게시글에대한 첨부파일을 읽어오는
select문을 간단하게 넣어보았다.
이것으로 기본준비는 끝났다.
계속해보니까 어느정도 익숙하다, 딱딱 뭐가 필요하겠군! 했지만 많이놓쳤고 책을 더욱더 꼼꼼하게 보지않아서 생기는 오류들도 많았다...
자만하지말고 계속 공부해야겠다..
휙휙 스피드를 내려하니 그만큼 더 두고가고 잃어가는느낌이다. 천천히 초심을 잡고 계속 공부하고 모르는게있으면 검색하고 해야겠다.
'Spring공부 > 3-파일업로드' 카테고리의 다른 글
프로젝트(3)-게시물 조회 (0) | 2021.10.15 |
---|---|
프로젝트(2)-등록화면처리 (0) | 2021.10.14 |
파일업로드(6)-첨부파일삭제 (0) | 2021.10.14 |
파일업로드(5)-원본 이미지 보여주기 (0) | 2021.10.14 |
파일업로드(4)-첨부파일의 다운로드 (0) | 2021.10.13 |
댓글