개발을 하다 보면 직접 프레임워크를 설정하는 경우는 거의 없을 것이다. 이미 구성된 환경에서 비지니스 로직을 입히는 경우가 대부분이라 생각한다.
필자도 처음 mybatis 설정을 해본다.
Spring Boot에서 xml설정대신 JAVA config로 진행해보려 한다. xml과의 연결은 @Mapper를 이용할 것이다.
@Mapper를 사용하게되면 다음 세 가지 사항을 주의해주어야 한다.
1. xml의 id와 Mapper의 메소드명을 일치시켜야 한다.
2. xml의 namespace가 실제 Mapper의 경로를 가리켜야 한다.
3. Mapper가 xml을 찾을 수 있도록 경로를 설정해 주어야 한다.
아래 내용에 다시 한번 언급하도록 하겠다.
Spring 프레임워크 말고 다른 언어로 웹 어플리케이션을 개발할때 사용할 수 있는 추가 프레임워크이다.
Spring이 제공하는 것은 아니고 iBatis라는 곳에서 제공하였었는데 구글이 인수하여 MyBatis라는 이름으로 새롭게 지원하고있다.
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
mybatis Maven을 추가한다.
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://{url}:{port}/{db스키마}
username: {id}
password: {password}
application.yml 파일에 DB 커넥션 정보를 작성한다.
@Configuration
@MapperScan(basePackages = {"mapper들이 있는 패키지경로"})
public class DBConfiguration {
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Autowired
ApplicationContext applicationContext;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws IOException {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setConfigLocation(applicationContext.getResource("classpath:/mybatis/mybatis-config.xml"));
factoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/*Mapper.xml"));
return factoryBean;
}
@Bean
public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@MapperScan
@Mapper 어노테이션이 있는 클래스를 찾아 Bean에 등록해준다.
DataSource
- application.yml의 설정값을 읽어 dataSource 빈을 만든다.
SqlSessionFactory
- DataSource를 이용하여 mysql서버와 mybatis를 연결해준다.
- SqlSessionFactory는 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체이다.
- mybatis설정 파일 등록한다.
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>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
mapUnderScoreToCamelCase는 USER_ID -> userId처럼 변환하여 돌려준다.
- xml이 있는 경로를 설정한다.
SqlSessionTemplate
- SqlSessionTemplate는 mybatis의 쿼리문을 수행하는 역할을 한다.
@Mapper
public interface UserMapper {
List<UserVO> test() throws Exception;
}
<?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="패키지경로.UserMapper">
<select id="test" resultType="패키지경로.UserVO">
SELECT *
FROM USER
</select>
</mapper>
1. Mapper 인터페이스의 메소드명과 XML의 id가 같아야 한다.
2. Mapper 인터페이스의 풀 경로를 XML 파일의 namespace에 선언해주어야 한다.
userVO는 lombok을 이용하여 생성하였다.
lombok에 대한 포스팅을 참고 바란다. [Spring Boot/lombok] - lombok 어노테이션
다음은 DBCP(DataBase Connection Pool) 설정에 대해 포스팅 하도록하겠다.
SpringBoot logback 파일적재 (2) | 2021.10.27 |
---|---|
SpringBoot logback / log4jdbc 설정 (4) | 2021.10.19 |
Spring JPA란 (1) | 2021.10.17 |
Spring AOP Transaction설정 (0) | 2021.10.16 |
[DBCP] HikariCP (8) | 2021.10.12 |
댓글 영역