woniper

[mybatis] foreach를 이용한 다중 insert 본문

Framework

[mybatis] foreach를 이용한 다중 insert

woniper1 2014. 5. 7. 13:52

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

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

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

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


1. UserDto 클래스

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 객체에 담았다고 가정하자.

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 처리

public class UserMapper {
	
	@Autowired private SqlSession mapper;
	
	public void insetUser(Map map) {
		List list = (ArrayList)map.get("list");
		for(UserDto dto : list) {
			mapper.insert("user.insert", dto);
		}
	}
}

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

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

public class UserMapper {
	
	@Autowired private SqlSession mapper;
	
	public void insetUser(Map<string, object> map) {
		mapper.insert("user.insert", map);
	}
}

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


- <foreach> 태그 속성 설명

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

item : collection을 사용할 변수 명

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

Comments