티스토리 뷰
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를 통해서 다건을 처리하도록 하자.
끝!
'Framework > Persistent' 카테고리의 다른 글
MyBatis Mapping 방식 (Query ID vs Interface) (0) | 2021.01.22 |
---|---|
MyBatis란? 기본설정 및 사용방법 (1) | 2020.11.16 |
Mybatis 부적합한 열 유형: 1111 관련 오류가 날때 (1) | 2020.11.11 |
Server returned HTTP response code: 503 for URL: http://mybatis.org/dtd/mybatis-3-config.dtd 오류 조치 (0) | 2020.11.06 |
MyBatis 성능 향상시키는 방법 (with fetchSize, mapUnderscoreToCamelCase) (0) | 2020.06.26 |
댓글