본문 바로가기
SpringBoot/(책)스프링부트 시작하기

[springboot] 3. springboot MySql MyBatis 연결하기

by 평범한kiki 2023. 4. 21.

* 선행으로는

- MySql 설치

- MySql, HikariCP 설정

 

1. /board/src/main/java/board/configuration/DatabaseConfiguration.java 에 해당 내용 추가한다.

- spring-mybatis 에서 SqlSessionFactory 생성위해 SqlSessionFactoryBean 사용

  만약 스프링이 아닌 MyBatis 단독으로 사용할 경우에는 SqlSessionFactoryBuilder를 사용

- SqlSessionTemplate 사용 이유는 Thread-Safe를 지원하기 때문에 주입 한번으로

   트랜잭션 관리 및 여러 dao에서 공유하여 사용가능

	//spring-mybatis 에서 SqlSessionFactory 생성위해 SqlSessionFactoryBean 사용
	@Bean 
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		//앞에서 만든 데이터 소스 설정
		sqlSessionFactoryBean.setDataSource(dataSource);
		//mybatis 매퍼(Mapper)파일 위치 설정
		sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/sql-*.xml")); 
		return sqlSessionFactoryBean.getObject();
	}

 

2.  /board/src/main/resources 아래에 xml 설정파일 관련 폴더인 mapper 패키지 생성하기

     위에서 이렇게 위치 설정했다...

  - classpath    : resources 폴더 의미

  - /mapper/**/ : mapper 폴더 아래 모든 폴더 의미

  - /sql-*.xml    : 이름이 sql-로 시작하고 확장자가 xml인 파일

//mybatis 매퍼(Mapper)파일 위치 설정
sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/sql-*.xml"));

   

** 총 소스

package board.configuration;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.context.annotation.PropertySource;

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

@Configuration
@PropertySource("classpath:/application.properties") //설정파일 위치지정
public class DatabaseConfiguration {
	
	@Autowired
	private ApplicationContext applicationContext;

	//application.properties에 설정한 디비정보 사용하게 지정
	//prefix에 설정된데로 spring.datasource.hikari로 시작하는 설정을 이용해서 히카리CP 설정파일 만듬
	@Bean
	@ConfigurationProperties(prefix = "spring.datasource.hikari")
	public HikariConfig hikariConfig() {
		return new HikariConfig();
	}
	
	//앞에서 만든 히카리CP의 설정파일을 이용하여 디비와 연결하는 데이터소스 생성
	@Bean
	public DataSource dataSource() throws Exception{
		DataSource dataSource = new HikariDataSource(hikariConfig());
		System.out.println(dataSource.toString());
		return dataSource;
	}
	
	//spring-mybatis 에서 SqlSessionFactory 생성위해 SqlSessionFactoryBean 사용
	@Bean 
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		//앞에서 만든 데이터 소스 설정
		sqlSessionFactoryBean.setDataSource(dataSource);
		//mybatis 매퍼(Mapper)파일 위치 설정
		sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/sql-*.xml")); 
		return sqlSessionFactoryBean.getObject();
	}
	
	//SqlSessionTemplate는 Thread-Safe를 지원하기 때문에 주입 한번으로 트랜잭션 관리 및 여러 dao에서 공유하여 사용가능
	@Bean
	public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

 

 

참조) https://lasbe.tistory.com/123