[Spring] 게시물에 첨부파일 등록하기 - 2 -
이전 글
2021.08.29 - [Spring] - [Spring] 게시물에 첨부파일 등록하기 - 1 -
이 글은 이전 글에 이어서 작성하는 글입니다.
게시물 등록과 첨부파일의 데이터베이스 처리
게시물이 등록될 때 첨부파일과 관련된 자료를 같이 전송하고, 이를 데이터베이스에 등록합니다. 게시물의 등록은 <form> 태그를 통해 이루어지므로, 이미 업로드된 첨부파일의 정보는 별도의 <input type='hidden'> 태그를 생성해서 처리합니다.
이를 위해서는 첨부파일 정보를 태그로 생성할 때 첨부파일과 관련된 정보(data-uuid, data-filename, data-type)를 추가합니다.
<input type='hidden'> 으로 처리된 첨부파일의 정보는 BoardVO로 수집됩니다.
BoardVO 클래스
BoardVO에는 attachList라는 이름의 변수로 첨부파일의 정보를 수집하기 때문에 <input type='hidden'>의 name은 'attachList[인덱스번호]'와 같은 이름을 사용합니다.
JSP 화면에서 Javascript를 이용해서 기존에 <form> 태그를 전송하는 부분을 아래와 같이 수정합니다.
register.jsp의 일부
브라우저에서 게시물 등록을 선택하면 이미 업로드된 항목들을 내부적으로 <input type='hidden'> 태그들로 만들어서 <form> 태그가 submit될 때 같이 전송되도록 합니다.
BoardController, BoardService의 처리
파라미터를 수집하는 BoardController는 별도 처리 없이 전송되는 데이터가 제대로 수집되는지 확인합니다.
BoardController 클래스
테스트
업로드한 파일의 값들이 제대로 넘어간 것을 확인할 수 있습니다.
BoardServiceImpl 처리
BoardMapper와 BoardAttachMapper는 이미 작성해 두었기 때문에 BoardServlceImpl에서 두 개의 Mapper 인터페이스 타입을 주입하고, 이를 호출하는 일입니다. 2개의 Mapper를 주입받아야 하기 때문에 자동주입 대신에 Setter 메서드를 이용하도록 수정합니다.
<BoardServiceImpl 클래스 수정 전>
<BoardServiceImpl 클래스 수정 후>
게시물의 등록 작업은 tb_board 테이블과 tb_attach 테이블 양쪽 모두 insert가 진행되어야 하기 때문에 트랜잭션 처리가 필요합니다.
BoardServiceImpl 클래스의 일부
BoardServiceImpl의 register( )는 트랜잭션 하에서 tb_board에 먼저 게시물을 등록하고, 각 첨부파일은 생성된 게시물 번호를 세팅한 후 tb_attach 테이블에 데이터를 추가합니다. MyBatis 쪽에 문제가 없다면 데이터베이스의 tb_attach 테이블에 여러 파일이 등록되었을 때 아래와 같은 모습으로 출력되는 것을 볼 수 있습니다.
실행 결과
게시물과 첨부파일의 등록 그리고 트랜잭션 처리 등에 대해 알아보았습니다.
'java, spring' 카테고리의 다른 글
[Spring] 게시물의 삭제와 첨부파일 삭제 (0) | 2021.08.30 |
---|---|
[Spring] 게시물의 조회와 첨부파일 보여주기 (0) | 2021.08.30 |
[Spring] 게시물에 첨부파일 등록하기 - 1 - (0) | 2021.08.29 |
[Spring] 첨부파일 삭제 (0) | 2021.08.28 |
[Spring] 원본 이미지 보여주기 (0) | 2021.08.28 |