[게시판] 메이븐 게시판 만드는법7~수정/update~(자바 스프링 만들기 예제)_jdbc java maven spring_-How to make a bulletin board-++
+ 메이븐 게시판 만드는법7 : 수정/update
+ 메이븐 게시판 만드는법6 : 상세페이지/detail/veiw
https://rockbottomdevbus.blogspot.com/2023/02/6detailveiw-jdbc-java-maven-spring-how.html
+ 메이븐 게시판 만드는법5 : 세팅 (인코딩설정) 및 등록/insert
https://rockbottomdevbus.blogspot.com/2023/01/5-jdbc-java-maven-spring-how-to-make.html
+ 메이븐 게시판 만드는법4 : 설치 및 세팅 (DB테이블 생성)
https://rockbottomdevbus.blogspot.com/2022/12/4db-jdbc-java-maven-spring-how-to-make.html
+ 메이븐 게시판 만드는법3 : 설치 및 세팅 (DB연결하기)
https://rockbottomdevbus.blogspot.com/2022/11/3db-jdbc-java-maven-spring-how-to-make.html
+ 메이븐 게시판 만드는법2 : 설치 및 세팅 (프로젝트 임포트하기)
https://rockbottomdevbus.blogspot.com/2022/07/2-java-maven-spring-how-to-make.html
+ 메이븐 게시판 만드는법1 : 설치 및 세팅
https://rockbottomdevbus.blogspot.com/2022/05/1-java-maven-spring-how-to-make.htm
* 라인이랑 소스랑 안맞는경우 게시판 만드는법 마지막글에 파일 다운로드를 받아주세요.
1. detailForm.jsp 파일 수정 ( 함수 수정 20line / 버튼수정 37line / form태그 수정 29line / input태그 추가 30)
- 수정버튼을 클릭하면 매모폼을 서브밋(서버로보낸다/컨트롤러로 보낸다) 시킨다.
$("#updateBtn").click(function(){
$("#memoform").submit();
});
- 버튼 id와 함수 id셀렉터와 이름을 맞춰준다
<button type="button" class="btn btn-success" id="updateBtn"> 수정하기 </button>
- 폼이 서브밋되면 updateOk라는 컨트롤러의 리쾌스트 메핑부분 포스트방식으로 이동된다.
<form action="updateOk" method="post" id="memoform">
- 인풋태그를 추가해준다. 폼이 서브밋되면서 인풋값들이 updateOk라는 컨트롤러의 리쾌스트 메핑부분으로 넘어갈 때 폼 안에 값들은 이 인풋값들과 textarea값들이다.
글번호가 컨트롤러로 넘어가야 그글번호로 수정할 정보들을 db에 업데이트할 수 있다(업데이트 쿼리의 where절에 글번호가 들어간다고 생각하면 쉽다.)
type이 hidden인 이유는 detail 페이지에서(선택한 글에 저장되있는 값들) 글번호를 사용자에게 보여주고싶지 않으면 hidden으로 하면된다.
<input type="hidden" class="form-control" id="noticeNO" name="noticeNO" value="${detailInfo.noticeNO}">
2. NoticeController.java 파일 수정 (메서드 추가 71 line)
- updateOk 으로 요청이들어오면 인자(@ModelAttribute NoticeVO vo) NoticeVO의 변수를 통하여 화면단에서 서브밋했던 form의 input / textarea 값이 들어오게 된다.
- NoticeVO 변수인 vo에 무슨값이 들어오는지 System.out.println(); 로 체크하면서 개발하면
더 수월할 것이다.
- noticeService.update(vo) = NoticeService.java파일의 update 함수를 호출하면서
인자로 vo(서브밋했던 form의 input / textarea 값들)를 집어넣어준다.
- 서비스를 호출하는 이유는 자바의 가장 큰 장점인 캡슐화(모듈화) 때문이다.
다른 컨트롤러에서 업데이트를 다시사용할 일이 있는 경우 noticeService.update() 를 호출해
사용하면 되기 때문에 부품 파츠 처럼 조립하여 사용 할 수 있게 된다.
@RequestMapping(value="/updateOk")
public String updateOk(@ModelAttribute NoticeVO vo){
System.out.println("업데이트");
System.out.println("VO" + vo);
noticeService.update(vo);
return "redirect:/list";
}
* 추가로 @Autowired(의존성 주입)이라는 기능을 통해 컨트롤러에서 서비스를 호출 할 수 있게
선언을 해줘야한다 (아직은 복잡하니 이런게 있구나만 알아두자)
@Autowired
private NoticeService noticeService;
3. NoticeService.java 파일 수정 (메서드 추가 41 line)
- 인자인 NoticeVO vo는 컨트롤러에서 서비스를 호출할 때 집어넣었던 vo(화면단에서 서브밋했던 form의 input / textarea 값들)를 받아준다.
- noticeDAO.update(vo) = NoticeDAO.java파일의 update 함수를 호출하면서
컨트롤러에서 받은 vo(서브밋했던 form의 input / textarea 값들) 값을 집어넣어준다.
public void update(NoticeVO vo){
noticeDAO.update(vo);
}
* 추가로 @Autowired(의존성 주입)이라는 기능을 통해 서비스에서 DAO를 호출 할 수 있게
선언을 해줘야한다 (아직은 복잡하니 이런게 있구나만 알아두자)
@Autowired
private NoticeDAO noticeDAO;
4. NoticeDAO.java 파일 수정 (메서드 추가 44 line)
- 인자인 NoticeVO vo는 서비스에서 DAO를 호출할 때 집어넣었던 vo(화면단에서 서브밋했던 form의 input / textarea 값들)를 받아준다.
- sqlSession.update("notice.update",vo) = 마이바티스라는 db와 프로젝트와 연동하기 편리하게끔 만들어진 프레임워크을 통해 xml파일로 db에 쿼리를 실행시키기 위하여 xml파일에 메퍼에 메핑되어있는이름 notice의 update태그 함수(쿼리)를 호출 하면서, 그쿼리에 vo값을 전달한다.
(복잡하니 notise_sql.xml파일로 notice라는 이름으로 들어오는 쿼리들중에 update 쿼리를 호출 하면서 vo 값을 집어넣어준다고 간단하게 생각하면된다.)
public void update(NoticeVO vo){
sqlSession.update("notice.update",vo);
}
* 추가로 @Autowired(의존성 주입)이라는 기능을 통해 DAO에서 SQL(쿼리)를 XML파일로 호출 할 수 있게 선언을 해줘야한다 (추가적으로 설정해야하는 내용이 더있지만 아직은 복잡하니 이런게 있구나만 알아두자)
@Autowired
private SqlSession sqlSession;
5. notice_sql.xml 파일 수정 {메서드(쿼리) 추가 33 line}
- dao에서 xml을 호출 할 때 전달받은 vo값을 #{notice}, #{noticeSubject} ,#{noticeNO} 같은 값에 메칭하여 넣어준다고 생각하면된다. (NoticeVO.java을 열어보면 어떤이름으로 매칭되는 것들이 있는지 알 수 있다)
- parameterType = 전달받은 vo가 무슨타입인지에 대해 명시해야한다.
vo는 NoticeVO타입(NoticeVO 클래스/파일) 이다.
- 쿼리가 실행되면 실제 디비에 반영된다. 게시판기능의 핵심은 데이터를 db에 입출력하며 컨트롤하는 것이다.
<update id="update" parameterType="noticeVO">
<![CDATA[
update NOTICE set
noticeSubject = #{noticeSubject}
, notice = #{notice}
where noticeNO=#{noticeNO}
]]>
</update>
* 추가로 notice.update 같이 호출되는 것을 처리하기위해 이름을 메핑시켜야한다.
<mapper namespace="notice">
댓글
댓글 쓰기