1. 사전 준비
- pom.xml 수정
다음과 같은 내용을 pom.xml에 추가합니다 1. mybatis (버전은 스프링 버전에 맞게 선택 가능) 2. mybatis-spring
3.dbcp2, 4. mysql-connector 5. spring-jdbc
<!-- MySQL -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
- jdbc.properties생성
WEB-INF에 properties폴더 생성 > 다음과 같은 jdbc.properties 파일 생성
jdbc.username = user_id
jdbc.password = password
jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://URL/DB_NAME?serverTimezone=Asia/Seoul&useSSL=false
- mysql 연동
다음과 같이 root-context.xml에 추가한다
<!-- MySQL dataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- jdbc.properties를 찾게 해주는 placeholder -->
<context:property-placeholder location="/WEB-INF/properties/jdbc.properties" />
2. mybatis 연동 및 사용
- TestModel 생성
DB로부터 받아온 데이터를 담을 Model 클래스를 생성한다
@Getter
@Setter
public class Test_Model {
private String date;
private int count;
}
- mybatis-config.xml 생성
main/resources에 다음과 같은 mybatis-config.xml을 생성한다. 등록된 모델을 test라는 별칭으로 사용할 수 있다.
<?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 type="test.main.model.Test_Model" alias="test" />
</typeAliases>
</configuration>
- rmcMapper.xml 생성
main/resource에 mappers라는 패키지를 만들고 패키지 내에 다음과 같은 testMapper.xml을 생성한다.
resultType를 config.xml에 지정한 test타입으로 반환하고 사용할 쿼리의 id를 getData로 지정한다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test.main.mapper.testMapper">
<select id="getData" resultType="test">
select * FROM test_db
</select>
</mapper>
- root-config.xml 수정
다음과 같이 root-config.xml에 mybatis를 설정하기 위한 위한 코드를 추가한다. mybatis-config.xml과 Mapper.xml을 bean으로 등록하고 sqlsession을 bean으로 등록한다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:/mybatis-config.xml" />
<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
3. Controller, Service, DAO 만들기
- Controller 생성
다음과 같은 Controller를 작성한다. 간단하게 getData를 해오는 코드이다.
@Controller
@RequestMapping(value = "/brokenSVC")
public class testController {
@Autowired
private BrokenService testService;
@GetMapping(value = "test")
public String home(Model model) {
System.out.println(testService.getdata().get(0).getDate());
return "testpage";
}
}
- Service 생성
다음과 같은 Service를 작성한다.
@Service
public class BrokenService {
@Autowired
private testDAO testdao;
public List<Test_Model> getData() {
return testdao.getData();
}
}
- DAO 생성
다음과 같은 DAO를 작성한다.
@Repository
public class BrokenDAO {
@Autowired private SqlSession sqlSession;
private static final String Namespace = "test.main.mapper.rmcMapper"; //rmcMapper가 있는 위치
public List<Test_Model> getData() {
return sqlSession.selectList(Namespace+".getData");
}
}
4. 결론
mybatis를 사용할 경우 기존 방법은 DAO에 쿼리문이 섞여있다는 단점이 있었는데 쿼리를 완벽하게 분리하여 사용할 수 있다는 장점이 있다.