[Mybatis] 대량의 데이터 다중 insert 하기
mybatis에서 다중insert를 해야하는 경우
참고 : https://kutar37.tistory.com/entry/mybatis-다중-insert
상황
양이 거대한 데이터를 디비에 저장할 때 → 일반적인 방법으로 마이바티스에 insert 했더니 하루죄~~~ㅇ일 인서트를 하고있다…
⇒ list 형태의 객체를 이용해서 insert를 해보자!
1. 단일 insert mapper를 구현하고 insert mapper를 List를 이용해 반복해서 insert 한다
1) DTO 클래스를 만들어 각각을 ArrayList에 add 로 담고, Map 객체에 map.put(“list”, list);로 담는다
2) List형태의 객체를 반복해서 단일 insert 처리한다.
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);
}
}
}
2. foreach를 이용한 다중 insert
public class UserMapper {
@Autowired private SqlSession mapper;
public void insetUser(Map<string, object> map) {
mapper.insert("user.insert", map);
}
}
<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>
-
태그 - collection : 파라미터 타입으로 넘어온 map 안에 list (map에 key값)
- item : collection을 사용할 변수명
- seperator : 반복 문자열을 구분할 문자
댓글남기기