DB 연결을 위한 Mybatis 설정

✒️ 2025-05-28 13:29 내용 수정


1. 프로젝트 의존성 설정

spring boot db.png


2. MyBatisConfig 설정

package com.example.db.mybatis;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import lombok.RequiredArgsConstructor;

@Configuration
@RequiredArgsConstructor
public class MyBatisConfig {

	final ApplicationContext applicationContext;
	
	// 외부 설정을 해당 클래스의 필드에 바인딩하기 위한 Annotation
	@ConfigurationProperties(prefix="spring.datasource.hikari")
	@Bean
	public HikariConfig hikariConfig() {
		return new HikariConfig();
	}
	
	// 유저 네임이나 비밀번호에 대한 설정을 HikariConfig 객체에 넣음
	// application.yml에 작성
	
	@Bean
	public DataSource dataSource() {
		return new HikariDataSource(hikariConfig());
	}
	
	@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception {
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource());
		// classpath : classes 폴더와 jar 폴더를 순회하면서 발견한 첫번째 파일을 로딩함
		// classpath* : classes 폴더와 jar 폴더를 순회하면서 발견한 모든 파일들을 로딩함
		sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath*:/mapper/*.xml"));
		sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:/config/config.xml"));
		
		SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject();
		// snake 표현 -> Camel 표현
		sqlSessionFactory.getConfiguration().setMapUnderscoreToCamelCase(true);
		return sqlSessionFactory;
	}
}
server:
  port: 9091
  
#JDBC dataSource
spring:
  datasource:
    hikari:
      driver-class-name: oracle.jdbc.OracleDriver
      jdbc-url: jdbc:oracle:thin:@localhost:1521:XE
      username: hr
      password: hr

3. config.xml과 mapper.xml 생성

spring boot db 2.png

<!-- config.xml -->
<?xml version="1.0" encoding="UTF-8"?>
	  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    
</configuration>
<!-- mapper.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="com.example.db.mapper.TimeMapper">
	<select id="getTime">
		SELECT SYSDATE FROM DUAL
	</select>
</mapper>
package com.example.db.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface TimeMapper { // TimeMapper 클래스의 위치가 mapper 파일에서의 namespace
	
	public String getTime(); // query문과 1대1 매칭
							// dao에서 sqlSession("getTime") 형태와 비슷
							// 함수 이름이 mapper의 id
	
}