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 |
댓글 영역