Mybatis는 왜인지 모르지만 Spring boot에서 간편한 설정을 제공하지 않는다고 한다.
Spring에서 지원하는건 아니고, Mybatis에서 만든 spring-boot-starter 라는게 있다고 하는데, 한두시간 삽질 해 봤지만 잘 되지 않았다. 그냥 내가 하고말지 싶어서 했다.
사용자 조회 기능을 위해 만들어 놓은 간단한 MVC 구조에 "SELECT NOW() " 라는 간단한 쿼리를 날려보았다.
pom.xml에 mariadb와 mybatis의 dependency를 잡아준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <!-- mariaDb / Mybatis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> </dependency> <!-- myBatis 설정 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.1</version> </dependency> | cs |
application.properties에 datasource 정보를 잡아준다.
# mariaDB
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/leafcat
spring.datasource.username=root
spring.datasource.password=root
mybatis는 application.properties에서 설정이 안되기 때문에 직접 java 코드로 설정을 잡아준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @Configuration @MapperScan(value={"com.**.mapper"}) public class WebConfig extends WebMvcConfigurerAdapter{ @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{ SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); Resource[] arrResource = new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/**/*Mapper.xml"); sqlSessionFactoryBean.setMapperLocations(arrResource); sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true); return sqlSessionFactoryBean.getObject(); } } | cs |
MapperScan 어노테이션을 통해 탐색할 Mapper 인터페이스의 경로를 설정해 주고, sqlSessionFactory를 이용해서 Mapper xml과 맵핑해준다.
(Mapper인터페이스의 경로와 xml 경로는 각자 프로젝트의 구조에 맞게 설정해 줘야한다. 위 소스와 똑같이 그대로 하면 당연히 안된다.)
Mapper XML은 아래와 같이 코딩한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?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.leafCat.common.user.mapper.UserListMapper"> <select id="getNow" resultType="java.lang.String"> SELECT NOW() </select> </mapper> | cs |
Mapper 자체는 인터페이스로 구현하면 되고, 인터페이스만 구현하면 되니 매우 간단하다.
1 2 3 4 5 6 | public interface UserListMapper { public String getNow() throws Exception; } | cs |
이걸 service에서 호출해서 사용하면 된다.
이러면 간단하게 DB에 접속해서 mapper xml에 있는 쿼리를 실행한 결과를 가져올 수 있다.