[Spring Boot] mybatis(마이바티스-xml) 사용 , mysql 사용

Posted by 김성철

SpringBoot - MyBatis xml 사용

2021-11-07 에 새로작성함

이전에 정리한 내용은  
java config 내용과 xml 내용이 혼재되어 있어서 아래의 내용으로 다시작성함  
두가지 방법을 섞어서 작성해놨다 보니 혼동이 옴,  
결정적으로 swagger를 정상적으로 실행하지 못하는 이슈가 발생하였음  
https://github.com/springfox/springfox/issues/1595  

callSettersOnNulls 옵션 적용

https://ayoteralab.tistory.com/entry/Spring-Boot-10-mybatis-camelCase-%EC%A0%81%EC%9A%A9  

그래들에 라이브러리 추가

=================================================================================================================  
dependencies {  
	.......................  
  
	//mybatis 사용을 위해 추가  
	compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'  
	compile 'org.springframework.boot:spring-boot-starter-jdbc'  
	compile 'mysql:mysql-connector-java'  
  
}  
=================================================================================================================  

application.yml 파일에 mysql 정보 추가

spring :
session :
timeout: 600
datasource:
##로그 없이 작동 - 개발 MYSQL
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/stock?serverTimezone=UTC&characterEncoding=UTF-8

MyBatisConfig.java 클래스 추가

=================================================================================================================  
  
package com.sungchul.stock.config;  
  
import org.apache.ibatis.session.SqlSessionFactory;  
import org.mybatis.spring.SqlSessionFactoryBean;  
import org.mybatis.spring.SqlSessionTemplate;  
import org.mybatis.spring.annotation.MapperScan;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;  
  
import javax.sql.DataSource;  
  
@Configuration  
@MapperScan(value={"com.sungchul.stock.**.*"})  
public class MyBatisConfig {  
  
	@Autowired  
	ApplicationContext applicationContext;  
  
	@Bean  
	public SqlSessionFactory sqlSessionFactory (DataSource dataSource) throws Exception {  
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();  
  
		sqlSessionFactory.setDataSource(dataSource);  
		PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();  
		sqlSessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/*Mapper.xml"));  
		sqlSessionFactory.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml"));  
		sqlSessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);  
		return sqlSessionFactory.getObject();  
	}  
  
	@Bean  
	public SqlSessionTemplate sqlSession (SqlSessionFactory sqlSessionFactory) {  
  
		return new SqlSessionTemplate(sqlSessionFactory);  
	}  
}  
  
=================================================================================================================  

resocures 폴더 밑에 mapper-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">  
  
			<!--mapUnderscoreToCamelCase : 스네이크 카멜 변환 -->  
			<!--callSettersOnNulls : 쿼리 결과 필드가 null인 경우, 누락이 되서 나오는데 누락이 안되게 하는 설정-->  
			<!--jdbcTypeForNull : 쿼리에 보내는 파라메터가 null인 경우, 오류 발생하는 것 방지  예) ##{search.user}-->  
  
	<configuration>  
		<settings>  
			<setting name="mapUnderscoreToCamelCase" value="true"/>  
			<setting name="callSettersOnNulls" value="true"/>  
			<setting name="jdbcTypeForNull" value="NULL"/>  
		</settings>  
	</configuration>  
  
=================================================================================================================  

mapper 인터페이스 생성

ParsingMapper.java  
=================================================================================================================  
  
package com.sungchul.stock.parsing;  
  
import org.apache.ibatis.annotations.Mapper;  
import org.springframework.stereotype.Repository;  
  
@Repository  
@Mapper  
public interface ParsingMapper {  
  
}  
  
=================================================================================================================  

mapper 파일 생성

=================================================================================================================  
<?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.sungchul.stock.parsing.ParsingMapper"><!--namespace를 통해 UserDAO와 연결합니다. -->  
  
</mapper>  
  
=================================================================================================================  

2021-11-10 추가
##################################################################################################################

yml 파일로 설정 사용

해당 파일로 설정을 사용할때는  
MyBatisConfig.java 클래스에서 적용한 아래의 부분을 주석처리하고  
	sqlSessionFactory.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml"));  
yml 파일에 아래와 같이 작성 (config-location 이내용을 기재하면 안됨)  
  
=================================================================================================================  
mybatis:  
  configuration:  
	map-underscore-to-camel-case: true  
	call-setters-on-nulls: true  
	jdbc-type-for-null: null  
  
=================================================================================================================  
  
위와 같이 설정하면 "mybatis-config.xml" 파일은 더이상 사용하지 않음