지금 까지 잘 따라왔다면 http://localhost:8080/create 에서 하나를 입력하면 데이터베이스에 잘 저장이 되면서 책 상세 화면이 나올것이다.
상세 페이지를 만들때 수정과 삭제, 목록 보여주기 버튼을 만들어놨으니 이것또한 활성화를 시켜보자!
먼저 수정 버튼을 활성화 할것이다.
지금까지 잘 따라왔다면 아마 느낌이 올것이다.
- 컨트롤러 추가
- 뷰 만들어주기
- 서비스 활성화
- 쿼리작성
- dao작성
이렇게 5가지를 해주면 된다.
순서는 굳이 상관은 없으니 자기만의 편한 방식을 만들어보자.
- 컨트롤러 추가 (bookController.java 추가)
@RequestMapping(value = "/update", method = RequestMethod.GET)
public ModelAndView update(@RequestParam Map<String, Object> map) {
Map<String, Object> detailMap = this.bookService.detail(map);
ModelAndView mav = new ModelAndView();
mav.addObject("data", detailMap);
mav.setViewName("/book/update");
return mav;
- view 생성(update.jsp)
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=utf-8"%>
<html>
<head>
<title>책 수정</title>
</head>
<body>
<h1>책 수정</h1>
<form method="POST">
<p>제목 : <input type="text" name="title" value="${ data.title }" /></p>
<p>카테고리 : <input type="text" name="category" value="${ data.category }" /></p>
<p>가격 : <input type="text" name="price" value="${ data.price }" /></p>
<p><input type="submit" value="저장" />
</form>
</body>
</html>
여기까지 하면 상세 페이지에서 수정하기 누르면 화면이 잘 이동된다.
이제 저장하기 누르면 update 쿼리가 돌아가는 로직을 만들어야한다.
update 쿼리는
update book set title='책제목', category='IT', price=100 where book_id=1
이런식으로 들어가야하고 book_SQL.xml파일에 추가하자!
- bookSQL.xml 파일 update 문 추가
<update id="update" parameterType="hashMap">
<![CDATA[
update book set title = #{title}, category = #{category}, price = #{price} where book_id = #{bookId}
]]>
</update>
- bookDao.java 메서드 추가
public int update(Map<String, Object> map) {
return this.sqlSessionTemplate.update("book.update", map);
}
insert와 동일하게 앞 파라미터는 쿼리 id 이고 뒤에 파라미터는 쿼리파라미터이고 리턴되는 값은 영향 받은 행의 수 이다.
- bookserviceImpl.java 작성
@Override
public boolean edit(Map<String, Object> map) {
int affectRowCount = this.bookDao.update(map);
return affectRowCount == 1;
}
affectRowCount가 1과 같은지 비교후 true/false를 반환이고,
수정만 되면 되는것이라서 따로 반환 데이터를 할 필요가 없다.
- bookService.java 슈퍼타입 생성
boolean edit (Map <String, Object> map);
- bookController.java 추가
@RequestMapping(value = "update", method = RequestMethod.POST)
public ModelAndView updatePost(@RequestParam Map<String, Object> map) {
ModelAndView mav = new ModelAndView();
boolean isUpdateSuccess = this.bookService.edit(map);
if (isUpdateSuccess) {
String bookId = map.get("bookId").toString();
mav.setViewName("redirect:/detail?bookId=" + bookId);
} else {
mav = this.update(map);
}
return mav;
}
jsp 의 form 태그에서 각각 title, category, price 그리고 bookId를 map 에 담아서 post 방식으로 보낸다.
this.bookService.edit(map)부분에서 데이터를 가지고 edit 메서드를 돌리고 결과를 통해서 아래 if 문이 돌아가고 성공시 화면 전환이 이루어 진다.
그러고 수정을 하면 상세 페이지에서 수정된 값으로 표현되는것을 볼 수 있고 데이터베이스에서도 데이터가 변경이 된다.
'IT > Java' 카테고리의 다른 글
spring 예제 part.11 (0) | 2021.12.25 |
---|---|
spring 예제 part.10 (0) | 2021.12.24 |
spring 예제 part.8 (1) | 2021.12.22 |
spring 예제 part.7 (1) | 2021.12.21 |
spring 예제 part.6 (1) | 2021.12.20 |
댓글