[Spring] Mybatis 연동절차
1. pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<!-- MyBatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
|
cs |
maven 원격 저장소(remote repo) 사이트(https://mvnrepository.com/)에서 maven 라이브러리 의존성 정보를 적용
단, 버전 어울림을 생각하여 선정하는 것이 바람함.
2. root-context.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="dataSourceOracle"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="hr" />
<property name="password" value="hr" />
</bean>
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceOracle" />
<property name="typeAliasesPackage"
value="com.javateam.mybatis_project.domain" />
<property name="mapperLocations"
value="classpath:com/javateam/mybatis_project/mapper/*.xml" />
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="mapUnderscoreToCamelCase" value="true" />
</bean>
</property>
</bean>
<bean id ="sqlSession"
class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
|
cs |
property 태그는 Setter 메소드를 통해 의존관계를 주입하고
constructor-arg 태그는 빈에 해당 속성을 생성자로 세팅한다는 뜻이다.
dataSource(DB접근정보) -> SqlSessionFactoryBean (DB연결과 SQL실행) -> SqlSession (SqlSessionTemplate객체로 명 령문 구현) 위 와 같이 3중 참조 구조가 되도록 의존성 정보를 구성한다.
(트랜잭션 구성 시 다른 의존성 정보 추가될 수 있음)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!-- 1) Spring 설정 방식 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.javateam.myBatisSample.domain" />
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
<!-- 2) 혼합 방식 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:/mapper/*.xml" />
<property name="configLocation" value="classpath:/config/mybatis-config.xml" />
</bean>
|
cs |
sqlSessionFactory에 속성을 별도의 xml파일(mybatis-config)을 참고하여 사용할 수도 있고 Spring Bean 설정방식을 사용할 수도 있다.
3. Domain(VO)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package com.javateam.myBatisSample.domain;
import java.sql.Date;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Employees {
private int employeeId;
private String lastName;
private String firstName;
private String email;
private String phoneNumber;
private Date hireDate;
private String jobId;
private long salary;
private int commissionPct;
private int managerId;
private int departmentId;
}
|
cs |
d
VO가 있어야 각종 정보를 취급할 수 있으므로 위치를 고려하여 설정하고 VO작성한다. (Table이 있다는 전제하에)
Getter/Setter 메소드는 Lombok 라이브러리를 이용하여 약식화했다.
4. Mybatis 세팅 파일
Mybatis 플러그인을 이용하는 xml mapper의 위치는 기본적으로 ava Resources → src/main/resources (자원 관련 파일들 지정 폴더) 를 활용
전자정부 프레임워크에는 mybatis 설정 파일 템플렛이 기본적으로 세팅되어있다
1
2
3
4
5
|
<?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>
</configuration>
|
cs |
위와 같은 설정파일이 형성됨
https://mybatis.org/mybatis-3/ko/configuration.html
설정파일에 대한 자세한 매뉴얼이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?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>
<!-- table field(EMP_ID) => VO(empId) -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<!-- domain(VO) package -->
<package name="com.javateam.myBatisSample.domain"/>
</typeAliases>
</configuration>
|
cs |
세팅 값으로 mapUnderscoreToCamelCase옵션 (DB칼럼명을 VO형태의 멤버 형태로 매핑해줌)
을 주었고
typeAliases는 sql구문을 작성할 mapper파일에 타입, 변수 선언에 풀네임을 적지 않아도 되게 만들어주는 옵션이다.
5. Mapper 파일(xml)
Mybatipse 플러그인이 있다면 위 메뉴로 mapper을 작성할 수 있다.
1
2
3
4
5
6
7
|
<?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="mapper.EmployeesMapper2">
<select id="getMember" resultType="EmployeesVO">
SELECT * FROM EMPLOYEES WHERE employee_id = #{employeeId} </select> </mapper>
|
cs |
select태그에 sql구문을 작성한다.
6. DAO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package com.javateam.myBatisSample.dao;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.javateam.myBatisSample.domain.Employees;
import com.javateam.myBatisSample.domain.EmployeesMapper;
@Repository
public class EmployeesDAOImpl implements EmployeesDAO {
private static final Logger log
= LoggerFactory.getLogger(EmployeesDAOImpl.class);
@Autowired
private SqlSession sqlSession;
@Override
public Employees getMember(int employeeId) {
return sqlSession.getMapper(EmployeesMapper.class).getMember(employeeId);
/*
* return sqlSession.selectOne("EmployeesMapper.getMember", employeeId);
*/
} //
}
|
cs |
sql문 호출할 DAO클래스 작성 (selectOne은 개체 한개만 호출, Mapper은 mapper객체 제공)
이렇게 기본적인 mybatis 연동을 이용한 select 호출이 완성되었다.