목차
이 글의 스크린샷과 명령은 2015년 Spring 4.2 / Java 8 / MyBatis-Spring 1.x 환경의 기록이다. 표시된 버전·드라이버 클래스·로그 라이브러리를 현재 프로젝트에 그대로 복사해 실행하는 절차가 아니다. 현재 설정 순서와 검증 기준은 글 맨 아래에 정리했다.
# 사전작업 eclipse에서 Spring Project-> Spring MVC Project 로 프로젝트 생성
1. 프로젝트 우클릭 -> Properties ->JavaCompiler
(1) JDK Compliance에서 Use compliance from execution environment … 체크 해제 후
(2) compiler compliance leve을 1.8로 변경.
왜냐하면 난 JDK 1.8을 사용하고있으니..

- 프로젝트 우클릭 -> Properties -> Project Facets
Java 버전을 1.8로 변경

3. pom.xml 에서 java버전을 바꿔줌
이왕이면 스프링 프레임워크 버전도 맞게 변경. 난 4.2.2를 사용하니.
<properties>
<java-version>1.8</java-version>
<org.springframework-version>4.2.2.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

- Mysql드라이버, Spring-test, Mybatis, Mybatis-spring 네가지 모듈을 설치해야함
어디서? Maven을 이용해서. .Pom.xml에 4가지 라이브러리를 입력해주면 되는데
http://mvnrepository.com/ 에 들어가면서 자신의 버전에 맞는 코드를 긁어오면됨.
pom.xml
<!-- mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!-- spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.3.RELEASE</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- spring test-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
그러면 Maven Dependencies에 보면 jar파일이 생겼을 것이다.

<4가지 설정한 것 과 버전 변경된 것 확인>
- log4jdbc-log4j2를 이용할 경우
pom.xml
<!-- log4jdbc -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
를 추가해주면된다.
src/main/resources 폴더에 log4jdbc.log4j2.properties 파일과 logback.xml파일을 추가해주면된다.
파일명 : log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
파일명 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/book/logging/logback/base.xml"/>
<logger name="jdbc.sqlonly" level="DEBUG"/>
<logger name="jdbc.audit" level="INFO"/>
<logger name="jdbc.resultset" level="ERROR"/>
<logger name="jdbc.resultsettable" level="ERROR"/>
<logger name="jdbc.connection" level="INFO"/>
</configuration>
- 이제 mybatis 연동을 해주어야함.
그러기위해선 root-context.xml에서 설정해줘야함
경로 : src->main->WEB-INF-> spring -> root-context.xml
먼저 root-context.xml을 클릭하면 하단에 Namespages를 클릭 후
캡처화면처럼 체크해주고 저장
체크 항목 aop, beans, context, jdbc, mybatis-spring

그 다음 Source에 들어감
(1). DataSource 설정
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/db명"></property>
<property name="username" value="sql아이디"></property>
<property name="password" value="${DB_PASSWORD}"></property>
</bean>
만약 log4jdbc를 이용하여 할 경우 dirverClassName에서 value 값을 net.sf.log4jdbc.sql.jdbcapi.DriverSpy로 변경하면된다.
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
(2). SqlSessionFactory 객체 설정
- mybatis와 스프링 연동 작업에서 핵심은 Connection을 생성하고 처리하는 SqlSessionFactory는 Sql의 DB연결과 SQL실행의 모든 것 가진 객체임
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"></property>
</bean>
- property name에보면 configLocation과 mapperLocation이 있는데
configLocation은 mybatis-cofing.xml 파일의 경로고
mapperLocation은 mapper의 경로
그러므로 본인이 설정한 경로에 맞게 맞춰주면 될 것이다.
나는 src/main/resources 에 mybatis-config.xml을 넣어줌
mybatis-config.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
mapper는
src/main/resources/ 에서 mappers 패키지를 만들어서 넣어줌.
이건 알아서.
mappers/ 안에 있는 exMapper.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="네임스페이스">
</mapper>
(3) SqlSessionTemplate 설정
- DAO에서 DB의 연결의 맺고 작업이 완료된 후 연결을 하는 작업을 SqlSessionTemplate 클래스를 이용하여 처리
SqlSessionTemplate는 mybatis의 SqlSession인터페이스로 구현한 클래스로 기본적인 트랜잭션 관리나 스레드 처리의 안전성보장과 DB연결과 종료를 책임짐
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="SqlSessionFactory"></constructor-arg>
</bean>
그럼 다된거.
그리고 테스트를 해보면됨.
현재 프로젝트에서 다시 구성하는 순서
위 설정을 새 프로젝트에 옮길 때는 먼저 Spring Boot 버전과 MyBatis-Spring-Boot-Starter의 호환 범위를 맞춘다. MyBatis 공식 호환표에서는 Starter 4.x가 Spring Boot 4.x와 Java 17 이상, Starter 3.x가 Boot 3.2~3.5를 대상으로 한다. 옛 Maven 조각의 Spring 4.2, MyBatis-Spring 1.2, MySQL Connector/J 5.1을 서로 섞어 업그레이드하면 클래스 로딩 문제와 API 불일치가 발생할 수 있다. 아래는 Boot 4.x / Starter 4.x 계열을 선택했다는 전제의 구성 방향이다. 정확한 패치 버전은 사용할 때 공식 호환표에서 확인한다.
- 프로젝트 생성 시 Java 버전, Spring Boot 메이저 버전, MyBatis starter, MySQL Connector/J 의존성을 한 세트로 맞춘다.
- 실행 환경에 DB URL, 사용자, 비밀번호를 등록하고 로컬 개발용 데이터베이스를 준비한다.
- Spring Boot의
DataSource설정이 연결 풀을 생성하게 한다. @Mapper가 붙은 인터페이스를 등록하고 SQL과 결과 매핑을 작성한다.- 저장·조회 통합 테스트로 실제 DB 연결, 파라미터 바인딩, 트랜잭션 롤백을 확인한다.
# application.yml: 비밀값은 실행 환경에서 주입
spring:
datasource:
url: ${DB_URL}
username: ${DB_USER}
password: ${DB_PASSWORD}
DB_URL은 예를 들어 개발 DB의 JDBC URL을 가리킨다. 환경 변수만 적고 존재 여부를 확인하지 않으면 애플리케이션 시작 때 오류가 난다. 운영 배포에서는 비밀 관리 수단으로 값을 공급한다. DB 연결 값을 Git에 올리지 않는다.
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface MemberMapper {
@Select("SELECT name FROM members WHERE id = #{id}")
String findName(@Param("id") long id);
}
#{id}는 MyBatis의 파라미터 바인딩이다. 사용자가 입력한 값을 SQL 문자열에 직접 이어 붙이지 않는다. 위 코드는 members(id, name) 테이블이 존재한다는 전제다. 매퍼를 검색하는 패키지와 애플리케이션의 컴포넌트 검색 범위를 확인한다. XML 매퍼를 사용한다면 파일 위치·namespace·statement ID가 인터페이스와 일치해야 한다.
flowchart LR A["환경 변수"] --> B["Spring DataSource"] B --> C["SqlSessionFactoryBean"] C --> D["SqlSessionTemplate"] D --> E["MemberMapper"] E --> F["서비스"]
Starter는 그림 중 SqlSessionFactoryBean, SqlSessionTemplate, 매퍼 연결을 자동 설정한다. 따라서 옛 글의 XML 빈 정의를 새 Boot 프로젝트에 그대로 중복 등록하지 않는다. 연결 실패면 DataSource 설정과 DB 접근 권한을 보고, 매퍼 빈이 없으면 패키지와 @Mapper를, SQL 실패면 실제 스키마와 매핑을 본다. 로그에 SQL 바인딩 값이 노출될 수 있으므로 상세 SQL 로그는 개발 환경에 한정한다.
참고: MyBatis Spring Boot Starter 공식 가이드, Spring Boot SQL 데이터베이스, MySQL Connector/J 드라이버.