[mybatis] foreach를 이용한 다중 insert
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 : 반복 문자열을 구분할 문자
출처 : https://blog.woniper.net/194?category=531455
'JAVA > Java' 카테고리의 다른 글
Collections 프레임워크 (0) | 2021.03.19 |
---|---|
JVM 아키텍처 (0) | 2021.03.19 |
[Java] 문자열 비교 equals/equalsIgnoreCase/compareTo (0) | 2021.03.16 |
java isNumeric, isDigits, isNumber (0) | 2020.10.27 |
java inner class (0) | 2020.09.07 |
AbstractList.add(E)는 쓸 수 없어! (0) | 2020.09.07 |
naver 검색 API 예제 (0) | 2020.09.07 |
java8 stream match (0) | 2020.09.07 |