강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

deoksam님의 프로필 이미지
deoksam

작성한 질문수

스프링 DB1편 update 메소드 질문

해결된 질문

작성

·

101

0

public void update(String memberId, int money){
    String sql = "update member set money = ? where member_id=?";

    Connection con = null;
    PreparedStatement psmt = null;

    try {
        con = getConnection();
        psmt = con.prepareStatement(sql);
        psmt.setInt(1,money);
        psmt.setString(2,memberId);
        int result = psmt.executeUpdate();
        log.info("result size={}",result);
    } catch (SQLException e) {
        throw exTranslator.translate("update",sql,e);
    }finally {
        close(con,psmt,null);
    }
}

save() , findById() 처럼 Member객체를 반환하지않는 이유가 궁금합니다.

int update()로 1,0으로 정상 비정상을 확인하는 방법도 있나요 ?

아니면 Member update()로 코드를 짜볼수도있을까요 ?

위의 방식으로

update()에서 업데이트가 잘되었는지 리턴값으로 확인하고싶을때는 어떤식으로 해야하나요 ?

제대로 된 질문인지는 잘 모르겠네요 ㅠㅠ

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

update() 메소드의 리턴 타입에 관한 예시를 설명드리겠습니다. 스프링 Data JDBC를 사용하는 경우, 수정 쿼리를 위한 메소드에 @Modifying 애노테이션을 사용하고, 리턴 타입을 지정할 수 있습니다. 예를 들어, 아래와 같은 방식으로 update 쿼리의 실행 결과를 boolean 타입 혹은 업데이트된 레코드의 개수를 int 형으로 받을 수 있습니다.

@Modifying
@Query("UPDATE DUMMYENTITY SET name = :name WHERE id = :id")
boolean updateName(@Param("id") Long id, @Param("name") String name);

이 경우 int 타입은 업데이트된 레코드의 수를, boolean 타입은 업데이트가 성공적으로 이뤄졌는지를 나타냅니다. 성공적으로 업데이트된 레코드가 하나라도 있으면 true, 없으면 false를 리턴합니다.

deoksam님께서 질문하신 것처럼 Member 객체를 반환하지 않는 이유는 일반적으로 update 연산의 경우, 객체의 상태를 변경하기보다는 데이터베이스에 저장된 레코드를 수정하는 작업이기 때문입니다. 실행 결과로는 변동된 레코드의 수 또는 성공 여부로 충분하며, 객체를 다시 로드하려면 별도의 조회 쿼리를 실행해야 합니다.

위에서 제시된 형식으로 int update() 또는 boolean update() 형태로 작성하셔서 업데이트 실행 결과를 확인하시면 됩니다. 만약 Member 객체를 갱신하고 객체를 리턴하길 원한다면, update 후에 추가적으로 조회를 하는 로직(findById)을 구현하셔야 합니다.

이에 대한 더 자세한 내용은 Spring Data JDBC 공식 문서에서 확인하실 수 있습니다.

정보 제공 출처:
- Modifying Query Documentation

deoksam님의 프로필 이미지
deoksam

작성한 질문수

질문하기