Kim VamPa

[Spring][쇼핑몰 프로젝트][17] 작가 수정 페이지 - 2 본문

스프링 프레임워크/쇼핑몰 프로젝트

[Spring][쇼핑몰 프로젝트][17] 작가 수정 페이지 - 2

Kim VamPa 2021. 3. 18. 10:00
728x90
반응형
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188

목표

작가 정보 수정 기능 구현

 이번 포스팅에서는 저번 포스팅에서 구현한 '작가 수정 페이지(authorModify.jsp)'에서 들어온 요청을 서버 단계에서 처리하는 기능 구현을 목표로합니다.

 

 작가 정보 수정에 사용될 쿼리를 실행하는 Mapper 메서드 부터 Service 메서드, Controller url 매핑 메서드 순으로 작업을 합니다.

 

 작가 정보 수정이 완료되면 '작가 관리 페이지(authorManage.jsp)'로 이동을 하도록 할 것인데 사용자가 수정이 완료되었음을 알 수있도록 경고창을 띄우는 기능 구현 또한 목표로합니다.

 

 

 

순서

1. Mapper, Service 메서드

2. Controller 작업(AdminController.java)

3. 결과창 구현(authorManage.jsp)

4. 테스트

 

 

 

1. Mapper, Service 메서드

AuthorMapper.java 인터페이스

 

 작가 정보 수정 쿼리를 실행할 메서드를 선언하였습니다. 수정될 데이터를 전달 받기 위해서 파라미터로 AuthorVO를 부여하였습니다. 반환타입을 int로 하게되면 수정에 성공했을대 1을 반환, 수저에 실패했을때는 0을 반환합니다. 반환값을 활용하기 위해서 리턴 타입을 int로 작성하였습니다. 

 

	/* 작가 정보 수정 */
	public int authorModify(AuthorVO author);

 

그림 1-1

 

AuthorMapper.xml

 

 인터페이스에서 선언한 메서드가 실행할 쿼리를 작성합니다. authorId를 조건문으로하여 authorName, nationId, authorIntro데이터를 수정하는 쿼리문을 작성하였습니다.

 

더불어 updateDate가 현재의 시간으로 수정되도록 하였습니다. Oracle의 경우 sysdate이고 MySQL의 경우 now()를 사용하였습니다.

 

<!-- oracle -->
  	<!-- 작가 정보 수정 -->
  	<update id="authorModify">
  	
  		update vam_author set authorName=#{authorName}, nationId=#{nationId}, authorIntro=#{authorIntro}, updatedate=sysdate where authorId = #{authorId}
  	
  	</update>
    
<!-- MySQL -->
	<!-- 작가 내용 수정 -->
	<update id="authorModify">
	
		update vam_author set authorName=#{authorName}, nationId=#{nationId}, authorIntro=#{authorIntro}, updatedate=now() where authorId = #{authorId}
	
	</update>

 

그림 1-2

 

그림 1-3

 

AuthorMapperTests.java

 

 작성한 Mapper메서드가 정상적으로 동작하는지를 확인하기 위해서 아래의 코드를 작성하여 Junit 테스트를 진행합니다.

 

	/* 작가 정보 수정 */
	@Test
	public void authorModifyTest() {
		
		AuthorVO author = new AuthorVO();
				
		author.setAuthorId(1);
		System.out.println("수정 전...................." + mapper.authorGetDetail(author.getAuthorId()));
		
		author.setAuthorName("수정");
		author.setNationId("01");
		author.setAuthorIntro("소개 수정 하였습니다.");
		
		mapper.authorModify(author);
		System.out.println("수정 후...................." + mapper.authorGetDetail(author.getAuthorId()));
		
	}
    

 

그림 1-4

 

그림 1-5

 

그림 1-6

 

AuthorService.java 인터페이스

 

 작가 정보 수정 쿼리를 실행하는 Mapper 메서드를 호출하는 메서드를 선언합니다.

 

	
    /* 작가 정보 수정 */
	public int authorModify(AuthorVO author) throws Exception;
    

 

그림 1-7

 

AuthorServiceImpl.java

 

 인터페이스에서 선언한 메서드를 오버라이딩 하여 구현부를 작성합니다. 메서드가 int형을 반환해야하기 때문에 return에서 mapper 메서드를 호출합니다.

 

 Mapper 단에서 테스트를 하였지만 저는 Service 단에서도 테스트를 진행 해주었습니다. 테스트 코드는 Mapper단에서 한 코드와 동일 합니다.

 

	/* 작가 정보 수정 */
	@Override
	public int authorModify(AuthorVO author) throws Exception {
		log.info("(service) authorModify........." + author);
		return authorMapper.authorModify(author);
	}

 

그림 1-8

 

그림 1-9

 

 

 

2. Controller 작업(AdminController.java)

작가 정보 수정 요청을 처리할 URL 매핑 메서드를 작성합니다.

 

	/* 작가 정보 수정 */
	@PostMapping("/authorModify")
	public String authorModifyPOST(AuthorVO author, RedirectAttributes rttr) throws Exception{
		
		logger.info("authorModifyPOST......." + author);
		
		int result = authorService.authorModify(author);
		
		rttr.addFlashAttribute("modify_result", result);
		
		return "redirect:/admin/authorManage";
		
	}

 

그림 2-1

 

 뷰에서 전달받은 데이터를 전달받기위해 AuthorVO를 파라미터로 부여하였습니다. 추가로 작가 정보 수정 후 '자각 관리 페이지(authorManage.jsp)'로 이동할때 수정 성공여부를 알리기 위핸 데이터를 전송하기 위해서 RedirectAttributes를 파라미터로 부여하였습니다.

 

 service의 authorModify()메서드를 호출하여 반환 받은 결과값을 int타입인 result 변수에 저장을 하엿습니다.

 

 수정 성공 결과인 result 변수 값을 addFlashAttribute()를 활용하여 "modify_result" 속성명에 저장 합니다.

 

 리다이렉트 방식으로 '작가 관리 페이지(authorManage.jsp)'로 이동 할 수 있도록  return값을 작성하였습니다.

 

 

 

3. 결과창 구현(authorManage.jsp)

 

 서버로부터 전달받은 "modify_result"속성에 저장된 값에 따라 출력되는 결과 창을 구현합니다. $(document).ready(function() 메서드 내부에 아래의 코드를 추가합니다. 

 

	let mresult = '<c:out value="${modify_result}"/>';
	
	checkmResult(mresult);
	
	function checkmResult(mresult){
		
		if(mresult === '1'){
			alert("작가 정보 수정을 완료하였습니다.");
		} else if(mresult === '0') {
			alert("작가 정부 수정을 하지 못하였습니다.")	
		}
		
	}

 

그림 3-1

 

 if문을 사용하여 1을 반환받을 경우 '성공' 경고창을 0을 반환받을 경우 '실패' 경고창이 출력되도록 메서드를 작성하였고 해당 메서드를 호출하는 코드를 작성하였습니다.

 

 

 

4. 테스트

 수정이 정상적으로 도는지, 수정 후 결과 경고창이 출력되는지를 확인 합니다.

 

그림 4-1

 

그림 4-2

 

그림 4-3

 

그림 4-4

 

그림 4-5

 

 

 

REFERENCE

  •  

DATE

  • 2020.03.18
728x90
반응형
Comments