[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);
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