SpringMVC-4일차

박상원·2024년 5월 13일

spring

목록 보기
7/15

MyBatis


  • 마이바티스는 개발자가 지정한 SQL, 저장 프로시저 그리고 몇 가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.
  • 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정 및 결과 매핑을 대신해준다.
  • 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO를 설정해서 매핑하기 위해 XML과 어노테이션을 사용할 수 있다.

MyBatis SqlSessionFactory 생성

  • 모든 마이바티스 애플리케이션은 SqlSessionFactory 인스턴스를 사용한다.
  • SqlSessionFactory 인스턴스는 SqlSessionFactoryBuilder를 사용하여 만들 수 있다.
  • SqlSessionFactoryBuilder는 XML 설정파일에서 SqlSessionFactory 인스턴스를 빌드할 수 있다.
  • 마이바티스는 클래스 패스와 다른 위치에서 자원을 로드하는 것으로 좀 더 쉽게 해주는 Resources라는 유틸성 클래스를 제공한다.

MyBatis SqlSession 생성

  • SqlSessionFactory를 이용해서 SqlSession 인스턴스를 만들 수 있다.
  • SqlSession은 데이터베이스에 대해 SQL 명령어를 실행하기 위해 필요한 모든 메서드를 가지고 있다.
  • SqlSession 인스턴스를 통해 직접 SQL 구문을 실행할 수 있다.

OLD

try (SqlSession session = sqlSessionFactory.openSession()) {
	Student student = session.selectOne("com.edu.jdbc.mybatis.StudentMapper.selectStudent", 1);
}

NEW - mapper interface를 사용하는 방식

try (SqlSession session = sqlSessionFactory.openSession()) {
	StudentMapper mapper = session.getMapper(StudentMapper.class);
    Student student = mapper.selectStudent(1);
}

Scope와 생명주기

SqlSessionFactory

  • SqlSessionFactory는 애플리케이션을 실행하는 동안 존재해야만 합니다.
  • 애플리케이션이 실행되는 동안 여러 차례 SqlSessionFactory를 다시 빌드하지 않는 것이 가장 좋은 구성이다.
  • SqlSessionFactory의 가장 좋은 스코프는 애플리케이션(싱글턴) 스코프이다.

SqlSession

  • 각 쓰레드는 자체적으로 SqlSession 인스턴스를 가져야 한다.
  • SqlSession 인스턴스는 공유되지 않고 쓰레드에 안전하지도 않기 때문에 가장 좋은 스코프는 요청 또는 메서드 스코프이다.
  • SqlSession을 static 필드나 클래스의 인스턴스 필드로 지정해서는 안된다.
  • 서블릿 프레임워크의 HttpSession과 같은 관리 스코프에 둬서도 안된다.
  • 웹 프레임워크를 사용한다면 HTTP 요청과 유사한 스코프에 두는 것으로 고려해야 한다.
    • 달리 말해서 HTTP 요청을 받을 때마다 만들고 응답을 리턴할 때마다 SqlSession을 닫을 수 있다.
    • SqlSession을 닫는 것은 중요하다. 언제나 finally 블록에서 닫아야만 한다.

Mapper 인스턴스

  • Mapper는 매핑된 구문을 바인딩 하기 위해 만들어야 할 인터페이스이다.
  • mapper 인스턴스의 가장 좋은 스코프는 SqlSession과 동일하다.
  • mapper 인스턴스의 가장 좋은 스코프는 메서드 스코프이다.
    • 사용할 메서드가 호출되면 생성되고 끝난다.
try (SqlSession session = sqlSessionFactory.openSession()) {
	BlogMapper mapper = session.getMapper(BlogMapper.class);
}

0개의 댓글