[Spring] 14. MyBatis&SqlSessionTemplate

Dami·2025년 4월 27일

MyBatis & SqlSessionTemplate

MyBatis + Spring에서 SqlSessionTemplate을 이용해 DB를 다루는 방법


1. SqlSessionTemplate이란?

  • SqlSessionTemplate은 MyBatis의 SqlSession 기능을 Spring Framework 환경에 맞게 구현한 템플릿 클래스이다.
  • SqlSession이 제공하는 select, insert, update, delete 기능을 감싸면서, 스프링의 트랜잭션 동기화, 예외 변환 처리, 자원 해제를 자동으로 관리해준다.
  • 직접 SqlSessionFactory.openSession()으로 세션을 열거나 닫는 코드를 작성할 필요 없이, 템플릿 메서드를 호출하는 것만으로 DB 작업이 가능해진다.
항목설명
트랜잭션 연동스프링 트랜잭션 매니저와 연동되어 동일한 트랜잭션 범위 내에서 작업을 수행한다.
자원 자동 해제SQL 실행 후 Connection, PreparedStatement, ResultSet 객체를 자동으로 해제한다.
예외 일괄 변환SQLException을 Spring의 DataAccessException 하위 예외로 변환하여 처리 일관성을 유지한다.
스레드 안전성다중 스레드 환경에서도 안전하게 사용할 수 있도록 설계되어 있다.

SqlSessionTemplate 메서드

메서드설명
insert(String statement, Object parameter)SQL INSERT 문을 실행하고 영향받은 행 수를 반환한다.
update(String statement, Object parameter)SQL UPDATE 문을 실행하고 수정된 행 수를 반환한다.
delete(String statement, Object parameter)SQL DELETE 문을 실행하고 삭제된 행 수를 반환한다.
selectOne(String statement, Object parameter)SQL SELECT 문을 실행하여 1건만 반환한다. (여러 건일 경우 예외 발생)
selectList(String statement, Object parameter)SQL SELECT 문을 실행하여 다수의 레코드를 리스트로 반환한다.

2. Mapper XML 작성 방식

Mapper XML 파일은 SQL 문을 정의하는 파일로, Java 코드에서 쿼리를 직접 작성하는 대신 XML로 관리한다.

이로 인해 SQL 가독성과 유지보수성이 향상된다.

기본 구조 예시

<mapper namespace="mybatis">
  
    <insert id="m1">
        INSERT INTO address (name, age, gender)
        VALUES ('홍길동', 25, 'm')
    </insert>

    <delete id="m2" parameterType="String">
        DELETE FROM address WHERE seq = #{seq}
    </delete>

    <select id="m5" resultType="int">
        SELECT COUNT(*) FROM address
    </select>

    <select id="m6" parameterType="String" resultType="com.test.mybatis.model.AddressDTO">
        SELECT * FROM address WHERE seq = #{seq}
    </select>

</mapper>
  • namespace: DAO 클래스가 호출할 경로를 정의한다.
  • id: 각 SQL 문을 식별하는 이름이며, DAO 메서드명과 매칭된다.
  • parameterType: 메서드 호출 시 전달받는 파라미터 타입을 명시한다.
  • resultType: 쿼리 결과를 매핑할 DTO 타입 또는 기본 타입을 명시한다.

항목설명
SQL 분리Java 코드와 SQL 문을 명확히 분리하여 가독성과 유지보수성을 향상시킨다.
객체 자동 매핑SELECT 결과를 DTO 객체로 자동 변환하여 코드 작성을 간소화한다.
트랜잭션 통합스프링 트랜잭션(@Transactional)과 자연스럽게 통합된다.
자원 자동 관리커넥션(Connection), 스테이트먼트(Statement), 결과셋(ResultSet)을 자동으로 해제한다.
예외 변환JDBC의 SQLException을 Spring의 일관된 예외 계층으로 변환하여 처리한다.
스레드 안전성다중 요청 환경에서도 안전하게 작동하도록 보장한다.

0개의 댓글