[mybatis] foreach를 이용한 다중 insert

Woniper 2014.05.07 13:52

mybatis에서 다중 insert를 해야 될 일이 생겼다. List 형태의 객체를 이용해서 insert를 해야 하는데 두가지 방법이 있다.

한가지는 단일 insert mapper를 구현하고 insert mapper를 List를 이용해 반복해서 insert한다.

또 다른 방법이 이제 부터 설명할 foreach를 이용한 다중 insert이다.

두가지 모두 예제를 통해서 설명해 보겠다.

 

1. UserDto 클래스

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

public class UserDto {

     

    private long seq;

    private String username;

    private int age;

     

    public long getSeq() {

        return seq;

    }

    public void setSeq(long seq) {

        this.seq = seq;

    }

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }  

}

 

UserDto 클래스를 아래와 같은 List로 만들고 Map 객체에 담았다고 가정하자.

?

1

2

3

4

5

6

7

8

9

10

11

UserDto dto1 = new UserDto();

dto1.setUsername("홍길동");

dto1.setAge(25);

UserDto dto2 = new UserDto();

dto2.setUsername("woniper");

dto2.setAge(26);

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

List<userdto> list = new ArrayList<userdto>();

list.add(dto1);

list.add(dto2);

Map<String, Object> map = HashMap<String, Object>();

map.put("list", list);

2. List형태의 객체를 반복해서 단일 insert 처리

?

1

2

3

4

5

6

7

8

9

10

11

12

public class UserMapper {

     

    @Autowired private SqlSession mapper;

     

    public void insetUser(Map<string, object=""> map) {

        List<userdto> list = (ArrayList<userdto>)map.get("list");

        for(UserDto dto : list) {

            mapper.insert("user.insert", dto);

        }

    }

}

</userdto></userdto></string,>

?

1

2

3

<insert id="insert" parametertype="com.woniper.UserDto">

      insert into user(username, age) values(#{username}, #{age})

</insert>

3. <foreach> 태그를 이용한 다중 insert

?

1

2

3

4

5

6

7

8

public class UserMapper {

     

    @Autowired private SqlSession mapper;

     

    public void insetUser(Map<string, object> map) {

        mapper.insert("user.insert", map);

    }

}

?

1

2

3

4

5

6

7

<insert id="insert" parametertype="java.util.Map">

        insert into user(username, age)

        values

        <foreach collection="list" item="item" separator=" , ">

            (#{item.username}, #{item.age})

        </foreach>

 </insert>

 

- <foreach> 태그 속성 설명

collection : parameterType으로 넘어온 map안에 list(map에 key값)

item : collection을 사용할 변수 명

seperator : 반복 문자열을 구분할 문자

 

[출처] http://blog.woniper.net/194

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
46 전자정부 표준프레임워크 - CKEditor 적용하기 file 졸리운_곰 2018.01.11 568
45 IntelliJ에서 SpringBoot 웹 프로젝트 생성하기 file 졸리운_곰 2017.11.14 222
44 파라미터 전송 - GET, POST 방식 file 졸리운_곰 2017.09.26 123
43 Velocity Template Engine 시작하기 file 졸리운_곰 2017.09.26 91
42 Migrating a Spring Web MVC application from JSP to AngularJS file 졸리운_곰 2017.09.26 68
41 [톰캣] server.xml 설정 file 졸리운_곰 2017.09.24 352
40 톰캣의 컨텍스트 외부로 경로 매핑하는 방법 졸리운_곰 2017.09.24 171
39 프레임 나뉜 페이지에서 새로고침시 페이지 유지하기 졸리운_곰 2017.09.17 77
38 [Spring] 한국거래소의 주가 정보 가져오기 졸리운_곰 2017.08.10 416
37 [Ibatis] 부등호 <, > 의 표시 졸리운_곰 2017.07.06 193
36 동적 SQL mybatis 가을의곰 2017.06.10 116
» [mybatis] foreach를 이용한 다중 insert 가을의곰 2017.06.10 413
34 mybatis (foreach문, in절) 가을의곰 2017.06.10 407
33 SW 릴리스를 간편하게 - Maven plugin + Jenkins file 졸리운_곰 2017.03.20 103
32 Migrating Spring Web MVC from JSP to AngularJS file 졸리운_곰 2017.02.07 207
31 Migrating a Spring Web MVC application from JSP to AngularJS file 졸리운_곰 2017.02.07 1513
30 Spring and Angular JS: A Secure Single Page Application 졸리운_곰 2017.02.06 426
29 스프링부트 소개 졸리운_곰 2017.02.06 190
28 Spring boot 시작하기 졸리운_곰 2017.02.06 247
27 [Java]Spring Boot를 사용한 web어플리케이션 만들기 file 졸리운_곰 2017.02.06 171
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED