[Spring] To Do List 웹페이지 만들기(spring legacy) - 5. 일기장(diary)_수정, 삭제

HodooHa·2024년 7월 3일

일기장의 마지막 부분인 '수정' 및 '삭제'를 살펴보자.

일기장 상세 조회 시 하단에 수정, 삭제 버튼을 만들었다.
수정 버튼을 누르면 작성했던 내용의 조회와 동시에 수정이 가능하다.

[일기장 수정]



제목과 일기 내용에 (수정)이라고 추가하였다.


수정이 잘 된것을 볼 수 있다.

만약 첨부하는 이미지가 없다면 이전 이미지 그대로 유지하도록 mySQL의 IFNULL을 사용하였다.
자세한 내용은 하기 코드를 보자.

[일기장 삭제]

이번엔 삭제 버튼을 눌러 일기 삭제를 했다.


삭제 성공 메세지가 뜨며 목록에서 삭제됨을 볼 수 있다.

[소스코드]

[DiaryDTO.java]

public class DiaryDTO {

	private int rownum;
	private int dno;
	private String userId;
	private String title;
	private String content;
	private String img;
	private Date createdDate;

	
	public DiaryDTO() {
	}
	
	public int getDno() {
		return dno;
	}

	public void setDno(int dno) {
		this.dno = dno;
	}

	public int getRownum() {
		return rownum;
	}

	public void setRownum(int rownum) {
		this.rownum = rownum;
	}
	
	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getImg() {
		return img;
	}

	public void setImg(String img) {
		this.img = img;
	}

	public Date getCreatedDate() {
		return createdDate;
	}

	public void setCreatedDate(Date createdDate) {
		this.createdDate = createdDate;
	}

	@Override
	public String toString() {
		return "DiaryDTO [rownum=" + rownum + ", dno=" + dno + ", userId=" + userId + ", title=" + title + ", content="
				+ content + ", img=" + img + ", createdDate=" + createdDate + "]";
	}

}

[DiaryController.java 일부]

@SessionAttributes("loginUser")
@Controller
@RequestMapping("/diary")
public class DiaryController {

	private DiaryService diaryService;

	@Autowired
	public DiaryController(DiaryService diaryService) {
		super();
		this.diaryService = diaryService;
	}

	@GetMapping("/update")
	public String updateDiaryform(DiaryDTO diaryDTO, Model model) {
	// 수정 버튼을 눌렀을 시 updateform.jsp 호출하며 해당 일기 정보를 model에 담아 보냄 
    // (일기 번호(dno)는 url 쿼리스트링으로 보냈다)
		try {
			DiaryDTO selectDiary = diaryService.selectOne(diaryDTO);
			model.addAttribute("diary", selectDiary);
		} catch (Exception e) {
			e.printStackTrace();
			return "common/errorPage";
		}

		return "diary/updateform";
	}

	@PostMapping("/update")
	public String updateDiary(DiaryDTO diaryDTO, HttpServletRequest request, MultipartFile imgFile, Model model,
			HttpSession session) {

		String page = "";

		/* 파일을 저장할 경로 설정 */
		String root = request.getSession().getServletContext().getRealPath("resources");

		System.out.println("root : " + root);

		String filePath = root + "\\uploadFiles";

		File mkdir = new File(filePath);
		if (!mkdir.exists()) {
			mkdir.mkdirs();
		}

		/* 파일명 변경 처리 */
		String savedName = null;
		if (!imgFile.isEmpty()) {
			String originFileName = imgFile.getOriginalFilename();
			String ext = originFileName.substring(originFileName.lastIndexOf("."));
			savedName = UUID.randomUUID().toString().replace("-", "") + ext;
		}

		/* 파일을 저장한다. */
		try {
			if (!imgFile.isEmpty()) {
				imgFile.transferTo(new File(filePath + "\\" + savedName));
			}

			UserDTO loginUser = (UserDTO) session.getAttribute("loginUser");

			diaryDTO.setImg(savedName);
			diaryDTO.setUserId(loginUser.getUserId());

			int result = diaryService.updateDiary(diaryDTO);

			if (result > 0) {
				page = "redirect:/diary/list?page=1";
				session.setAttribute("msg", "일기 수정 성공");
			} else {
				page = "common/errorPage";
				model.addAttribute("msg", "일기 수정 실패");
			}

		} catch (Exception e) {
			e.printStackTrace();
			/* 실패시 파일 삭제 */
			new File(filePath + "\\" + savedName).delete();
			page = "common/errorPage";
			model.addAttribute("msg", "일기 수정 실패");
		}

		return page;
	}

	@GetMapping("delete")
	public String deleteDiary(DiaryDTO diaryDTO, Model model, HttpSession session) {
 	// (일기 번호(dno)는 url 쿼리스트링으로 보냈다)
		String page = "";

		try {
			int result = diaryService.deleteDiary(diaryDTO);
			if (result < 0) {
				throw new Exception();
			} else {
				page = "redirect:/diary/list?page=1";
				session.setAttribute("msg", "일기 삭제 성공");
			}
		} catch (Exception e) {
			e.printStackTrace();
			page = "common/errorPage";
			model.addAttribute("msg", "일기 삭제 실패");
		}

		return page;
	}

}

[DiaryServiceImpl.java 일부]

@Service
public class DiaryServiceImpl implements DiaryService {

	private DiaryDAO diaryDAO;
	private SqlSessionTemplate sqlSession;

	@Autowired
	public DiaryServiceImpl(DiaryDAO diaryDAO, SqlSessionTemplate sqlSession) {
		super();
		this.diaryDAO = diaryDAO;
		this.sqlSession = sqlSession;
	}

	@Override
	public int updateDiary(DiaryDTO diaryDTO) throws Exception {
		int result = diaryDAO.updateDiary(sqlSession, diaryDTO);
		return result;
	}

	@Override
	public int deleteDiary(DiaryDTO diaryDTO) throws Exception {
		int result = diaryDAO.deleteDiary(sqlSession, diaryDTO);
		return result;
	}

}

[DiaryDAO.java 일부]

@Repository
public class DiaryDAO {

	public DiaryDTO selectOne(SqlSessionTemplate sqlSession, DiaryDTO diaryDTO) {
		return sqlSession.selectOne("diaryMapper.selectOne", diaryDTO);
	}

	public int updateDiary(SqlSessionTemplate sqlSession, DiaryDTO diaryDTO) {

		return sqlSession.update("diaryMapper.updateDiary", diaryDTO);
	}

	public int deleteDiary(SqlSessionTemplate sqlSession, DiaryDTO diaryDTO) {
		
		return sqlSession.delete("diaryMapper.deleteDiary", diaryDTO);
	}

}

[DiaryMapper.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="diaryMapper">
	<resultMap type="diaryDTO" id="diaryResultSet">
		<!-- 언더바가 들어가는 쿼리문에 한하여 매핑을 해줘야함 -->
		<result property="dno" column="dno" />
		<result property="userId" column="user_id" />
		<result property="title" column="title" />
		<result property="content" column="content" />
		<result property="img" column="img" />
		<result property="createdDate" column="create_date" />
		<!-- <result property="rownum" column="rownum" /> -->
	</resultMap>

	<select id="selectOne" parameterType="diaryDTO"
		resultMap="diaryResultSet">
		select * from
		diary
		where dno = #{dno}
	</select>

	<update id="updateDiary" parameterType="diaryDTO">
		update diary
		set
		user_id =
		#{userId},
		title = #{title},
		content = #{content},
		img = IFNULL(#{img},img)  <!-- 수정 img가 없으면 기존 이미지 적용 -->
		where dno = #{dno}
	</update>
	
	<delete id="deleteDiary" parameterType="diaryDTO">
		delete from diary
		where dno = #{dno}
	</delete>
</mapper>

이로써 드디어 일기장 부분을 마쳤다.
날씨, 채팅방, 챗봇은 수업 중 배운 내용을 실습하면서 적용한 부분인데 다음 포스팅에서 간단하게 살펴보겠다.

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

profile
성장하는 개발자, 하지은입니다.

0개의 댓글