[게시판] 메이븐 게시판 만드는법8~삭제/delete~(자바 스프링 만들기 예제)_jdbc java maven spring_-How to make a bulletin board-++

메이븐 게시판 만드는법8 : 삭제/delete

메이븐 게시판 만드는법7 : 수정/update

https://rockbottomdevbus.blogspot.com/2023/03/7update-jdbc-java-maven-spring-how-to.html

메이븐 게시판 만드는법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. list.jsp 파일 수정 ( 함수 수정 21line / 버튼 수정 96line / input 수정 64line  )

- 글번호 체크박스를 선택하여(다중선택가능) 삭제 버튼을 선택하면 선택한 글번호들을(배열) 서버로보낸다 컨트롤러의 deleteOk 메서드로 보낸다


체크되있는 체크박스 각각의 글번호 값 들을 chk_arr 변수에 배열로 넣어준다. 

- 컨트롤러의 deleteOk메서드로 chk_arr 값을 보낸다 (이름은 noticeNoArr로 보냄)

//다중 삭제

function gotoDelete() {

    // 체크된 글번호를 띄워본다 

    /* var checkNo = $("input[name=check]:checked").val();

    alert(checkNo); */

    var chk_arr = [];

    $("input[name=check]:checked").each(function(){

    var chk = $(this).val();

    chk_arr.push(chk);

    })

    location.href = "deleteOk?noticeNOArr="+ chk_arr;

}

- 버튼 선택 시 goDelete 자바스크립트 함수가 호출된다.

<button type="button" class="btn btn-success" id="delBtn" onclick="gotoDelete()"> 삭제하기 </button>


- 각각 글마다 체크 박스가 표시되며, 값은 해당글의 글번호로 설정한다

<input type="checkbox" name="check" value="${vo.noticeNO}">


2. NoticeVO.java 파일 수정 (필드 추가 21line / 게터세터 추가 77line / toString 재생성 84line)

- 필드를 추가한다 (배열)

- 우클릭 >> 소스 >> 제너레이트 게터엔 세터 >> 추가한 필드 체크하여 게터세터 생성 

- toString 메서드 제거 

- 우클릭 >> 소스 >> 제너레이트 toString  >> toString 재생성 (toString은 vo 수정될때 마다 최신화해준다 toString이 있어야 System.out.println(vo) 를 콘솔에 찍을때 메모리 주소로 보이지않고 제대로 나온다. 

private  int[] noticeNOArr;


3. NoticeController.java 파일 수정 (메서드 추가 80 line)

- deleteOk 으로 요청이들어오면 인자(@ModelAttribute NoticeVO vo)  NoticeVO의 변수를 통하여 화면단 자바스크립트 goDelete()함수에서 noticeNoArr이름으로 글번호값들이  들어오게 된다.

- int [] arr 변수를 선언하여 vo.getgetNoticeNOArr()(인자로 받은 글번호들)을 값으로 설정한다 

- 반복문을 사용하여 배열의 길이만큼 반복해서 noticeService.delete(arr[i]) 호출해준다

noticeService.delete(arr[i]) = NoticeService.java파일의 delete 함수를 호출하면서

인자에 순서대로 글번호가 입력된다. { ex) 2개의 글을 선택하여 삭제했을 때 / 첫번째 반복 문 호출 시  인자 = 10번째글번호입력 하여 호출 / 두번째 반복 문 호출 시  인자 = 12번째글번호입력 하여 호출 } 체크한 글의 수만큼 반복하여 호출된다.

- 삭제 후 목록페이지로 리다이렉팅된다. 

@RequestMapping(value="/deleteOk")

public String deleteOk(@ModelAttribute NoticeVO vo){

/* System.out.println(vo); */

int[] arr = vo.getNoticeNOArr();

for(int i=0; i < arr.length;  i++) {

noticeService.delete(arr[i]);

}

return "redirect:/list";

}


4. NoticeService.java 파일 수정 (메서드 추가 44 line)

- 인자인 int noticeNO는 컨트롤러에서 서비스를 호출할 때 넘겨준 각각의 글번호이다.

- noticeDAO.delete(noticeNO) = NoticeDAO.java파일의 delete함수를 호출하면서

컨트롤러에서 넘겨받은 noticeNO(체크한 각각의 글번호 값) 값을 집어넣어준다.

public void delete(int noticeNO){

noticeDAO.delete(noticeNO);

}


* 추가로 @Autowired(의존성 주입)이라는 기능을 통해 서비스에서 DAO를 호출 할 수 있게

선언을 해줘야한다 (아직은 복잡하니 이런게 있구나만 알아두자)

@Autowired

private NoticeDAO noticeDAO;


5. NoticeDAO.java 파일 수정 (메서드 추가 47 line)

- 인자인  int noticeNO는 서비스에서 DAO를 호출할 때 집어넣었던 noticeNO(글번호)를 받아준다. 

sqlSession.update("notice.delete",noticeNO) = 마이바티스라는 db와 프로젝트와 연동하기 편리하게끔 만들어진 프레임워크을 통해 xml파일로 db에 쿼리를 실행시키기 위하여 xml파일에 메퍼에 메핑되어있는이름 notice의 delete태그 함수(쿼리)를 호출 하면서, 그쿼리에 noticeNO값을 전달한다. 

(복잡하니 notise_sql.xml파일로 notice라는 이름으로 들어오는 쿼리들중에 delete쿼리를 호출 하면서 noticeNO값을 집어넣어준다고 간단하게 생각하면된다.)

public void delete(int noticeNO){

sqlSession.delete("notice.delete",noticeNO);

}


* 추가로 @Autowired(의존성 주입)이라는 기능을 통해 DAO에서 SQL(쿼리)를 XML파일로 호출 할 수 있게 선언을 해줘야한다 (추가적으로 설정해야하는 내용이 더있지만 아직은 복잡하니 이런게 있구나만 알아두자)

@Autowired

private SqlSession sqlSession;



6. notice_sql.xml 파일 수정 {메서드(쿼리) 추가 41 line}

- dao에서 xml을 호출 할 때 전달받은 noticeNO값을 #{noticeNO} 값에 메칭하여 넣어준다고 생각하면된다. (NoticeVO.java을 열어보면 어떤이름으로 매칭되는 것들이 있는지 알 수 있다)

parameterType = 전달받은 noticeNO가 무슨타입인지에 대해 명시해야한다. 

noticeNO는 int 타입이다. 

- 쿼리가 실행되면 실제 디비에 반영된다. 게시판기능의 핵심은 데이터를 db에 입출력하며 컨트롤하는 것이다. 

delete from NOTICE where noticeNO=#{noticeNO}


* 추가로  notice.update 같이 호출되는 것을 처리하기위해 이름을 메핑시켜야한다.

<mapper namespace="notice">


7.마무리 

- 제가 가지고 있는 지식으로만 게시판을 만들고 설명해보았습니다. 

여러가지로 부족하더라도 CRUD의 개념을 파악하는데 도움이 되었으면 좋겠습니다.

감사합니다.

댓글

T O P