>

mybatis를 사용하면 다음과 같이 업데이트 된 행 수를 쉽게 얻을 수 있습니다

update table set desc = 'xxx' where name = ?

그러나 카운트가 아닌 업데이트 된 행을 얻으려면 어떻게 mybatis로이를 달성 할 수 있습니까?


  • 답변 # 1

    이 업데이트는 데이터베이스에서 발생하고 행 데이터가 반환되지 않기 때문에 mybatis 자체는 그렇게 할 수 없습니다.

    유일한 옵션은 검색어를 수정하여 필요한 데이터를업데이트하고선택하는 것입니다. 이 효과를 얻는 방법은 사용중인 데이터베이스 및/또는 드라이버 지원에 따라 다릅니다.

    예를 들어 postgres에서 쿼리를 변경하고 RETURNING 를 추가 할 수 있습니다  이와 같은 절 :

    UPDATE table
    SET desc = 'xxx'
    WHERE name = ?
    RETURNING *
    
    

    이 쿼리는 선택된 쿼리로 바뀌며 select 로 매핑 할 수 있습니다.  mybatis의 쿼리. 다른 데이터베이스에는 비슷한 기능이 있습니다.

    또 다른 옵션 (데이터베이스 및/또는 JDBC 드라이버가이를 지원하는 경우)은 다음과 같이 두 가지 쿼리를 수행하고 업데이트하고 선택하는 것입니다

    <select id='updateAndReturnModified" resultMap="...">
        UPDATE table
        SET desc = 'xxx'
        WHERE name = @{name};
        SELECT *
        FROM table
        WHERE name = @{name};
    </select>
    
    

    그러나 더 엄격한 격리 수준 ( READ_COMMITED )을 사용해야 할 수도 있습니다.  예를 들어 작동하지 않습니다.) 두 번째 선택이 업데이트 후 상태를 확인하고 일부 동시 업데이트로 인한 변경 사항이 표시되지 않도록합니다. 다시 필요한지 여부는 사용중인 데이터베이스에 따라 다릅니다.

  • 이전 git - kubernetes gitrepo 볼륨 - 자동 재배치?
  • 다음 java - Spring Boot 20에서"hystrixstream"을 활성화하는 방법은 무엇입니까?