1. Model
* 짚고 넘어갈 뽀인트
- 코드만 잘 살피자.
1) product.xml
<update id="update">
<![CDATA[
UPDATE product
SET product_name = #{product_name}
,price = #{price}
,description = #{description}
,filename = #{filename}
,filesize = #{filesize}
WHERE product_code = #{product_code}
]]>
</update>
2) productDAO.java
public void update(Map<String, Object> map) {
sqlSession.update("product.update", map);
} // insert() end
2. View
* 짚고 넘어갈 뽀인트
- 상품 수정 버튼을 클릭할 시 product_update() function 호출.
- document.form1.action 을 활용하여 액션을 취한다.
: 이는 <form action="/product/update">와 같은 기능이다. 즉, 한 폼 안에서 다양한 액션을 취할 수 있다.
<input type="button" value="상품수정" onclick="product_update()">
function product_update(){
document.form1.action="/product/update";
document.form1.submit();
} // product_update() end
3. Controller
* 짚고 넘어갈 뽀인트
- update 명령어 생성.
- 기존 파일은 File 클래스를 활용하여 삭제하게 함.
- filesize=(long)product.get("FILESIZE") 코드가 오류가 났다.
: product.get("FILESIZE")는 Map<String, Object>로 만들어진 product 객체의 값을 get() 메서드로 가져오는 것이다.
: 여기서 FILESIZE라는 컬럼의 값을 가져올 때 Object로 가져오게 된다.
: 그런데, Object를 long 형으로 형변환 시에는 String으로 형변환을 한번 한 후 또 다시 형 변환을 해야한다.
: 그래서 수정된 코드는 filesize=Long.parseLong(product.get("FILESIZE").toString()); 이다.
@RequestMapping("/update")
public String update(@RequestParam Map<String, Object> map
,@RequestParam MultipartFile img
,HttpServletRequest req) {
String filename = "-";
long filesize = 0;
String product_code = map.get("product_code").toString();
Map<String, Object> product = productDao.detail(product_code);
if(img != null && !img.isEmpty()) {
filename = img.getOriginalFilename();
filesize = img.getSize();
try {
ServletContext application = req.getSession().getServletContext();
String path = application.getRealPath("/storage");
// 기존 파일 삭제하기
String oldFilename = product.get("FILENAME").toString();
File file = new File(path+"\\"+oldFilename);
if(file.exists()) {
file.delete();
} // if end
img.transferTo(new File(path+"\\"+filename));
} catch (Exception e) {
System.out.print("파일 등록 실패 : ");
e.printStackTrace(); // 에러 출력 메서드
} // try end
} else {
filename=product.get("FILENAME").toString();
filesize=Long.parseLong(product.get("FILESIZE").toString());
// filesize=(long)product.get("FILESIZE"); 오류
}// if end
map.put("filename", filename);
map.put("filesize", filesize);
productDao.update(map);
return "redirect:/product/list";
} // update() end
'⁂ MyBatis Framework > : 기본 익히기' 카테고리의 다른 글
[MyBatis] #5-2 AJAX를 활용한 댓글 게시판 만들기 2 - 댓글 등록(Insert) (0) | 2022.11.14 |
---|---|
[MyBatis] #5-1 AJAX를 활용한 댓글 게시판 만들기 1 - 테이블, DTO, DAO, Controller 생성 (0) | 2022.11.14 |
[MyBatis3] #4-7 파일 업로드 및 댓글 게시판 만들기 : 삭제 기능 넣기 (0) | 2022.11.11 |
[MyBatis3] #4-6 파일 업로드 및 댓글 게시판 만들기 : 상품 상세보기 페이지 (0) | 2022.11.11 |
[MyBatis3] #4-5 파일 업로드 및 댓글 게시판 만들기 : 검색 기능 넣기 (0) | 2022.11.11 |