본문 바로가기
Opensource

mybatis 와 PreparedStatement 정리

by 무대포 개발자 2022. 3. 11.
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 와 연관)

  1. #{} 를 사용하면 쿼리문에 ? 가 생기며, PreparedStatement 를 생성하여 파라미터를 바인딩합니다. PreparedStatement 를 사용함으로써 파싱된 쿼리문은 캐시에 담아서 재활용하기에 성능이 좋아집니다.
  2. ${} 를 사용하면 값이 넣어진 채로 쿼리문이 만들어지고 수행됩니다. 파라미터 값이 바뀔 때마다 쿼리문 파싱이 이루어져야 하며, 캐시 활용이 안되서 성능상 단점이 있습니다. 즉, Statement 를 사용하기에 성능상 이슈가 있습니다.

reference

댓글