728x90
반응형
mybatis 와 PreparedStatement 정리
PreparedStatement vs Statement
PreparedStatement
- PreparedStatement 는 동일하거나 비슷한 SQL 문을 효율적으로 처리하기 위한 기능을 뜻합니다.
- 동작 방식
- 준비 —> 컴파일 —> 변수 바인딩 —> 실행 단계입니다.
- 준비 단계에서는 ? 를 사용하여 쿼리 작성 insert into xxx (xxx) values(?,?).
- 컴파일 후, 실행 단계에서는 값을 바인딩 한 후, SQL 실행합니다.
Statement
- Statement 는 위 PreparedStatement 1~4단계를 계속해서 반복해서 사용합니다.
차이점
- PreparedStatement 는 처음 한 번만 1~3단계를 거친 후, 캐시에 담아 재사용합니다.
- 동일 쿼리를 반복적으로 수행한다면 PreparedStatement 가 성능에 좋습니다.
MyBatis 캐시 정리
- MyBatis 의 로컬 세션 캐시는 기본 값이 활성화이며, SqlSession 객체마다 가지고 있는 cache 입니다.
- Session 이 종료되면 캐시도 종료됩니다.
- 트랜잭션이 끝나거나 insert, update, delete 가 실행되거나, autoCommit=true 일 때 cache 정보 파기됩니다.
MyBatis 에서 $, # 이 어떻게 동작하는지 정리 (PreparedStatement 와 연관)
#{}
를 사용하면 쿼리문에 ? 가 생기며, PreparedStatement 를 생성하여 파라미터를 바인딩합니다. PreparedStatement 를 사용함으로써 파싱된 쿼리문은 캐시에 담아서 재활용하기에 성능이 좋아집니다.- ${} 를 사용하면 값이 넣어진 채로 쿼리문이 만들어지고 수행됩니다. 파라미터 값이 바뀔 때마다 쿼리문 파싱이 이루어져야 하며, 캐시 활용이 안되서 성능상 단점이 있습니다. 즉, Statement 를 사용하기에 성능상 이슈가 있습니다.
reference
'Opensource' 카테고리의 다른 글
[apache-commons-email] 첨부파일 명에 한글 포함될 경우 깨지는 현상 (0) | 2020.07.11 |
---|---|
apache-dbcp connectionFactory 개선사항 정리 (0) | 2020.07.10 |
HikariCP 는 Statement Cache 를 사용하지 않는다. (0) | 2020.07.10 |
댓글