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 = new 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); } }} |
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 : 반복 문자열을 구분할 문자
| Spring 파일 업로드 저장 (0) | 2016.09.20 |
|---|---|
| Spring 파일 디렉토리 경로 다운로드 (9) | 2016.09.20 |
| Mybatis, mysql 반복 쿼리 실행 (insert), foreach (0) | 2016.08.18 |
| 부트스트랩 페이징, 페이지네이션 (Bootstrap Pagination), 페이징 예제 (0) | 2016.07.29 |
| MyBatis (foreach문, in절) (0) | 2016.07.06 |
댓글 영역