본문 바로가기
IT/Java

spring 예제 part.9

by 성준하이 2021. 12. 23.
반응형

지금 까지 잘 따라왔다면 http://localhost:8080/create 에서 하나를 입력하면 데이터베이스에 잘 저장이 되면서 책 상세 화면이 나올것이다.

상세 페이지를 만들때 수정과 삭제, 목록 보여주기 버튼을 만들어놨으니 이것또한 활성화를 시켜보자!

 

먼저 수정 버튼을 활성화 할것이다.

지금까지 잘 따라왔다면 아마 느낌이 올것이다.

  1. 컨트롤러 추가
  2. 뷰 만들어주기
  3. 서비스 활성화
  4. 쿼리작성
  5. 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  (0) 2021.12.22
spring 예제 part.7  (0) 2021.12.21
spring 예제 part.6  (0) 2021.12.20

댓글