어노테이션을 사용한 대량의 insert가 가능한가요?


안녕하세요 스프링 초보입니다!

STS에 mybatis를 사용하고 있는데요,

어노테이션을 사용하여 컬렉션을 바로 넣을 수 있는 방법은 없을까요?

원하는 것은, @Insert를 사용한 맵퍼에서 아래와 같은 쿼리를 List 컬렉션을 메소드에 인자로 전달해서 수행할 수 있도록 하고싶은것인데요!

INSERT INTO tbname(v1, v2) VALUES (컬렉션 첫 줄의 v1, 컬렉션 첫 줄의 v2), (...), (마지막v1, 마지막v2);

이러한 것을 처리할 수 있는 방법이 혹시 있을까요?

  • 2016년 04월 01일에 작성됨
    리눅스 베이스의 자바 기반 웹애플리케이션 구현 및 서비스를 우선하고 있습니다.

조회수 357


1 답변


public interface HashcodeMapper {
    @Insert({
        "<script>",
        "INSERT INTO tbname (v1, v2) VALUES ",
        "<foreach collection='list' item='listItem' separator=','>",
        "(#{listItem.v1}, #{listItem.v2})",
        "</foreach>",
        "</script>"
    })
    int insertList(@Param("list") List<Object> list);
}

  • MyBatis 소스 버전을 보니, > 3.2.x 상위 버전 부터 가능한 기능으로 보입니다.    김현일 (Kevin Kim)   2016.4.1 03:07     
  • 답변 감사드립니다! 일단 기본 기능에서는 지원하지 않는 것 같구 위에서 말씀주신 드라이버랑 빌더를 연동시켜서 써야하는 것 같긴 한데.. 어떻게 연동해서 써야하는건지 잘 모르겠습니다! ㅠㅠ 어디서 드라이버와 빌더를 인스턴스화 해야하는건지 혹시 알 수 있을까요? 에러는 이런 형태로 발생했습니다. ### Error updating database. Cause: java.lang.UnsupportedOperationException ### The error may involve com.some.domain.mapper.methodName-Inline ### The error occurred while setting parameters ### SQL: INSERT INTO tbn(v1, v2) VALUES (?, ?) , (?, ?) ### Cause: java.lang.UnsupportedOperationException] with root cause java.lang.UnsupportedOperationException    fureweb   2016.4.1 09:20     
  • 사용하시는 MyBatis 버전을 알 수 있을까요?    김현일 (Kevin Kim)   2016.4.1 10:33     
  • 네! 지금 사용중인 mybatis는 3.3.1이고, mybatis-spring은 1.2.5 버전입니다!    fureweb   2016.4.1 13:10     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close