mybatis foreach를 이용해 insert batch 처리하기

30만정도 되는 데이터를 insert 해야하는데 for문을 이용한 단순 반복문으로 실행하니 insert가 안된다.

그래서 Mapper xml 에서 테그를 이용하여 대량의 데이터를 insert 하는 방법을 적어둔다.

java code

1
2
3
4
5
6
7
8
9
10
SqlSession sqlSession = null;
List<table>
tableList;
try {
sqlSession = getSqlSessionFactory().openSession(false);
Mapper table = sqlSession.getMapper(Mapper.class);
Mapper.insert(tableList);//List를 넘겨준다.
} finally {
sqlSession.commit();
}

위와 같이 List를 Mapper로 전달해주고 xml에서 활용하며된다.

Mapper XML

1
2
3
4
5
6
7
8
9
10
11
12
<insert id="insert" parameterType=“com.example.table">
insert into test (id, name, age)
VALUES
<foreach item="table" index="index" collection="list" separator=",">
(
#{table.emsid},
#{table.id},
#{table.name},
#{table.age}
)
</foreach>
</insert>

foreach 태그에서 collection 컬럼은 넘겨진 파라미터가 List 형태이므로 list라고 적어주면 된다.

공유하기