Spring

[SpringBoot]MyBatis

codi-3 2024. 10. 1. 20:21

MyBatis 스프링은 MyBatis와 Spring Framework를 통합하는 라이브러리다. MyBatis는 SQL 쿼리를 명시적으로 작성할 수 있는 장점이 있고, Spring은 애플리케이션을 전반적으로 관리하는 프레임워크다. 이 두 가지를 함께 사용하면 데이터베이스 연동을 더 효율적으로 처리할 수 있다.


주요 특징

  1. SQL과 XML의 명시적 사용: MyBatis는 ORM(객체 관계 매핑) 프레임워크지만, SQL을 직접 작성하고 실행할 수 있다. 따라서 SQL의 자유도를 유지하면서도 객체를 매핑할 수 있다.
  2. Spring과의 통합: MyBatis 스프링 모듈은 Spring의 DI(Dependency Injection)와 트랜잭션 관리 기능을 쉽게 사용할 수 있게 한다. 이를 통해 트랜잭션을 자동으로 관리하고, MyBatis 매퍼를 빈으로 등록하여 의존성 주입을 할 수 있다.
  3. SqlSession 및 매퍼 관리: Spring의 SqlSessionTemplate을 통해 MyBatis의 SqlSession 객체를 관리한다. 이 템플릿은 쓰레드 안전하게 동작하며 여러 DAO(데이터 액세스 객체)에서 재사용할 수 있다. XML 또는 애노테이션으로 작성한 MyBatis 매퍼 인터페이스를 Spring 빈으로 등록할 수 있다.

MyBatis 스프링 설정 예시

 

의존성 설정
MyBatis 스프링을 사용하려면 먼저 pom.xml 또는 build.gradle 파일에 MyBatis 및 Spring 관련 라이브러리 의존성을 추가해야 한다

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

 

데이터베이스 설정
Spring의 application.properties 또는 application.yml 파일에 데이터베이스 설정을 추가한다.

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=${DATASOURCE_PASSWORD}
mybatis.mapper-locations=classpath:/mappers/*.xml

 

매퍼 인터페이스 작성
MyBatis에서는 SQL 쿼리를 XML 파일로 분리할 수도 있고, Java 인터페이스에 애노테이션을 이용해 직접 쿼리를 작성할 수도 있다.

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(int id);
}

XML 매퍼 사용
쿼리를 XML 파일로 작성할 수도 있다. 아래는 UserMapper.xml의 예시다.

<mapper namespace="com.example.UserMapper">
    <select id="getUserById" parameterType="int" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

MyBatis와 Spring의 통합 장점

  1. 트랜잭션 관리: Spring의 트랜잭션 관리 기능을 사용하여 트랜잭션을 명시적으로 제어하지 않아도 된다.
  2. DI와 AOP 지원: Spring의 DI를 통해 MyBatis 매퍼를 쉽게 주입할 수 있으며, AOP 기능을 통해 로깅이나 트랜잭션 관련 로직을 쉽게 적용할 수 있다.
  3. 데이터베이스 연결 관리: SqlSession과 같은 MyBatis의 핵심 객체들이 Spring에서 자동으로 관리되므로, 개발자는 쿼리 실행에만 집중할 수 있다.

MyBatis 스프링을 사용하면 Spring의 구성 관리와 트랜잭션 관리 기능을 MyBatis의 유연한 SQL 관리와 결합하여 효율적인 데이터베이스 연동을 할 수 있다.