티스토리 뷰

batch 성 업무를 처리할때 동일한 쿼리에 바인딩할 값만 변경하여 계속 반복하며 처리해야 하는 상황이 있다. 

 

public void updateEmployee(List<Employee> list) {
  for (Employee employee : list) {
    sqlSession.update("Employee.updateEmployee", employee);
  }
}

 

이런식으로 java에서 for문을 돌며 몇번이고 update 쿼리를 호출하는 방식인데 바람직하지 않다. 성능을 끌어 올리고 싶다면 MyBatis의 foreach문을 이용하여 처리를 해주는 방법이 있다.

 

sql

<update id="updateEmployee" parameterType="map">
  UPDATE employee SET salary = 50000 WHERE employeeID IN
  <foreach item="employee" index="index" collection="list" open="(" separator="," close=")">
    #{employee.employeeID}
  </foreach>
</update>

java

public void updateEmployee(Map<String, Object> map) {
  sqlSession.update("Employee.updateEmployee", map);
}

 

위와 같이 사용하려면 map에 list를 넣고 실제로 collection값을 넣어야 한다. 그래서 foreach구문에 collection값에 map에 할당된 변수를 넣어주고, item에 변수를 지정하여 그 값으로 반복처리하는 것이다. 성능차이는 대략 10배정도 난다고 한다. 이런 비슷한 상황이 있다면 무조건 foreach를 통해서 다건을 처리하도록 하자. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
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
26 27 28 29 30 31