728x90

* 스프링부트에서 MyBatis를 사용하기 위해 다음 dependency를 추가한다.

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

 

 

1. 데이터베이스 연결 정보 등록

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url = jdbc:postgresql://localhost:5432/postgres
spring.datasource.username = postgres
spring.datasource.password = 1234
  • 다음과 같이 application.properties에 내가 연결하고 싶은 DB 정보 변수를 등록한다.

 

2. DataSource 빈 설정

@Configuration
public class DataSourceConfig {
	
	@ConfigurationProperties(prefix = "spring.datasource")
	@Bean(name="dataSource")
	public DataSource dataSource() {
		return DataSourceBuilder.create().build();   
	}

}
  • MyBatis의 SqlSession을 생성할 때 데이터베이스 정보 객체인 DataSource가 필요하다.
  • DataSource는 application.properties에 등록한 DB 정보를 가지고 생성한다.
  • @ConfigurationProperties(prefix = "spring.datasource") 어노테이션을 특정 객체에 붙이면 application.properties 에 있는 "spirng.datasource" 로 시작하는 모든 변수의 값을 해당 객체에 바인딩 시킨다는 뜻이다.

 

3. MyBatis Mapper 설정

@Configuration
@MapperScan(basePackages="*")
public class MyBatisConfig {

	@Bean
	public SqlSessionFactoryBean sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws IOException {
		PathMatchingResourcePatternResolver pmrpr = new PathMatchingResourcePatternResolver();
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		sqlSessionFactoryBean.setConfigLocation(pmrpr.getResource("classpath:/config/sqlmap/sql-mapper-config.xml"));
		sqlSessionFactoryBean.setMapperLocations(pmrpr.getResources("classpath:/config/sqlmap/mappers/*.xml"));
		return sqlSessionFactoryBean;
	}

	@Bean
	public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}

}
  • MyBatis의 xml 문서 내 쿼리를 Mapper 인터페이스 내 정해둔 메소드로 이용하기 위해서는 SqlSession 객체가 필요하다. 위에서 등록한 DataSource를 가지고 SqlSession 빈을 생성하고 등록하는 코드이다.
  • 등록된 SqlSession 빈이 쿼리를 모아놓은 xml 문서에서 원하는 쿼리를 호출하게 해주는 것이다.
  • @MapperScan(basePackages=""): Mapper 인터페이스로 인식될 경로를 지정한다.
  • sqlSessionFactoryBean.setConfigLocation(): MyBatis 부가 설정이 담긴 경로를 지정한다. 해당 파일에서 별칭 설정 등의 부가 설정이 가능하다.
  • sqlSessionFactoryBean.setMapperLocations(): 실행될 쿼리들을 모아놓은 xml 파일을 지정한다. 보통 최상위 폴더까지 가서 *.xml로 지정한다.
  • 이렇게 설정이 되어야 MyBatis를 사용할 수 있다.

 

4. MyBatis 부가 설정 파일 생성

<?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>
    <typeAliases>
		<typeAlias alias="boardMapper" type="egovframework.example.board.service.BoardMapper"/>
    </typeAliases>
</configuration>
  • MyBatis 부가 설정을 해주는 파일이다. 파일 이름은 보통 sql-mapper-config.xml이다.
  • 쿼리를 모아놓은 xml 파일에서 사용할 별칭들을 설정할 수 있다. typeAliases를 통해 기다란 패키지에서 부터 클래스 까지의 경로를 변수 이름으로 설정한다.

 

5. 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="egovframework.example.board.service.BoardMapper">
	
	<insert id="registBoard" parameterType="Map">
		INSERT INTO BOARD(TITLE, WRITER, CONTENT, REG_DATE, COUNT)
		VALUES(#{title}, #{writer}, #{content}, NOW(), 0)
	</insert>


</mapper>
  • Mapper 인터페이스에서 호출할 쿼리들을 작성한 xml 문서다.
  • insert, select, update, delete 등 여러 쿼리를 등록하고 각 쿼리의 id 값은 Mapper 인터페이스 메소드 명과 일치시켜야 한다.
  • 각 쿼리의 parameterType과 resultType 속성 값이 있는데 파라미터를 받을 때의 데이터 타입과 쿼리의 결과가 출력될 때의 데이터 타입을 지정한다.

 

6. Mapper 인터페이스 생성

@Mapper("boardMapper")
public interface BoardMapper {
	
	void registBoard(Map<String, Object> board);
}
  • 컨트롤러 및 서비스 단에서 호출할 메소드를 정의한다. 호출하고 싶은 쿼리의 id 값과 일치하도록 메소드를 생성하면 된다.
728x90