개발 정보/웹개발

[웹 개발] Eclipse REST API 구현 - UPDATE, DELETE문 처리

RoRoBong 2022. 6. 2. 08:34
728x90

안녕하세요

로로봉입니다 : )

오늘은 저번 포스팅에 이어 UPDATE와 DELETE 쿼리문을 처리하는 방법을 알아보도록 하겠습니다.

INSERT를 한번 해보았기 때문에 금방 이해하실 수 있으실 것 같습니다.


1) UPDATE

① PeopleSql.groovy

repository 패키지에 PeopleSql.groovy 파일을 열어 Update 쿼리를 추가해 줍니다.

public static final String UPDATE = """
   UPDATE people_tbl SET p_name = :name, p_age = :age, p_job = :job WHERE 1=1
""";
	
public static final String SEQ_CONDITION = """
   AND p_seq = :seq
""";

[ 그림 1 : Update SQL 추가 ]

② PeopleRepository.java

쿼리를 추가해주었다면 이제 PeopleRepository 클래스에 실제 업데이트 메서드를 만들어 줍니다.

public Integer updatePeople(People people) {
   String qry = PeopleSql.UPDATE;
   if(!people.getSeq().toString().isEmpty())
      qry += PeopleSql.SEQ_CONDITION;
		
   SqlParameterSource param = new MapSqlParameterSource("seq", people.getSeq())
				.addValue("name", people.getName())
				.addValue("age", people.getAge())
				.addValue("job", people.getJob());
   return namedParameterJdbcTemplate.update(qry, param);
}

[ 그림 2 : updatePeople 메서드 추가 ]

③ InfoService.java

이제 서비스를 이용해 Repository의 메소드를 호출할 수 있도록 InfoService 서비스 클래스에 메서드 하나를 추가해줍니다.

public Integer updatePeople(People people) {
   log.debug("people seq = {}", people.getSeq());
   return peopleRepository.updatePeople(people);
}

[ 그림 3 : InroService 추가 ]

④ InfoController5.java

이제 InfoController5 클래스에 UpdatePeople로 POST로 맵핑해줍니다.

@PostMapping("/UpdatePeople")
public ResponseEntity<String> UpdatePeople(@RequestBody People people) {
   try {
      log.debug("people = {}", people.toString());
      Integer updatedCnt = infoService.updatePeople(people);
      return new ResponseEntity<>(String.format("%d updated", updatedCnt), HttpStatus.OK);
   } catch (Exception e) {
      log.error(e.toString());
      return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
   }
}

POST로 전달되는 데이터는 로그로 기록하고, infoService 객체를 통해 updatePeople 메소드를 호출하였습니다.

[ 그림 4 : POST UpdatePeople 메소드 작성 완료 ]

⑤ Post 호출 방식으로 Update 호출

이제 Talend API Tester를 이용해 업데이트 해보도록 하겠습니다.

[ 그림 5 : UpdatePeople 호출 ]

Send 버튼으로 호출을 하게 되면 아래와 같이 Body부분에 몇 개의 데이터가 updated 되었는지 반환되었습니다.

[ 그림 6 : UpdatePeople 호출 결과 ]

people_tbl 데이터를 조회해보면 p_seq 가 4인 데이터가 변경 된 것을 볼 수 있습니다.

[ 그림 7 : people_tbl 데이터 결과 ]


2) DELETE

① PeopleSql.groovy

 Update와 동일하게 쿼리부터 만들어 보도록 하겠습니다.

PeopleSql.groovy 파일에 DELETE 문을 추가해줍니다.

public static final String DELETE = """
   DELETE FROM people_tbl WHERE 1=1
"""

[ 그림 8 : Delete 쿼리 추가 ]

② PeopleRepository.java

Repository에 아래와 같이 delete 메서드를 만들어 줍니다.

public Integer deletePeople(Integer seq) {
   String qry = PeopleSql.DELETE + PeopleSql.SEQ_CONDITION;
		
   SqlParameterSource param = new MapSqlParameterSource("seq", seq);
   return namedParameterJdbcTemplate.update(qry, param);
}

[ 그림 9 : deletePeople 작성 완료 ]

③ InfoService.java

이제 서비스에 POST에서 호출할 수 있도록 메서드를 만들어 줍니다.

public Integer deletePeople(Integer seq) {
   log.debug("people seq = {}", seq);
   return peopleRepository.deletePeople(seq);
}

[ 그림 10 : 서비스 메서드 작성 완료 ]

④ InfoController5.java

이번에는 키값만 전달 받도록 @RequestParam을 사용하여 seq 값만 전달 받도록 하였습니다.

InfoController5 클래스에 아래 메소드를 추가해줍니다.

@PostMapping("/DeletePeople")
public ResponseEntity<String> DeletePeople(@RequestParam(value="seq") Integer seq) {
   try {
      log.debug("people seq = {}", seq);
      Integer deletedCnt = infoService.deletePeople(seq);
      return new ResponseEntity<>(String.format("%d deleted", deletedCnt), HttpStatus.OK);
   } catch (Exception e) {
      log.error(e.toString());
      return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
   }
}

[ 그림 11 : DeletePeople 작성 완료 ]

⑤ Post 호출 방식으로 Delete 호출

이제 Talend API Tester 프로그램으로 DeletePeople을 호출해보겠습니다.

DeletePeople 메서드는 키값만 파라미터로 넘기기 때문에 Content-Type에 application/x-www-form-urlencoded 를 넣어주어야 합니다.

Body 부분을 Form형식으로 변경하면 알아서 변경이 되긴 합니다.

[ 그림 12 : DeletePeople 호출 ]

Send 버튼으로 호출하게 되면 아래와 같이 1 deleted가 결과로 전달되는 것을 볼 수 있습니다.

[ 그림 13 : DeletePeople 호출 결과 ]

이제 데이터베이스에 people_tbl에 데이터를 확인해보면 3번 키 값의 데이터가 제거된 것을 볼 수 있습니다.

[ 그림 14 : people_tbl 데이터 결과 ]

 

공감 ♥ + 구독부탁드립니다 : )

728x90
반응형