목차
1. Mybatis로 DB 연동
2. Spring으로 DB 연동
1. Mybatis로 DB 연동
- 스프링에서 DB 연동하는 방법 중 하나는 mybatis의 환경설정 파일(ex. configuration.xml)에서 연동하는 것이다.
- DB 연동을 mybatis의 환경설정에서 할 경우, 스프링의 환경설정 파일 중 하나인 root-context.xml 파일에는 DB 연동과 관련된 내용이 없다.
- mybatis의 환경설정 파일에는 1) alias를 설정 2) DB 연동 3) mapper 파일 지정과 관련된 내용이 들어간다.
- mybatis의 환경설정에서 DB 연동을 할 경우, DAO 클래스에서 @Autowired로 SqlSession 객체를 주입하는 것은 안되기 때문에, 직접 SqlSession 객체를 구해주어야 한다.
• mabatis 환경설정 파일 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?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>
<properties resource="jdbc.properties" />
<typeAliases>
<typeAlias alias="dept" type="myBatis1.model.Dept" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="Dept.xml" />
</mappers>
</configuration>
|
cs |
• 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
28
29
30
31
32
33
34
35
36
37
38
39
|
package myBatis1.dao;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.stereotype.Repository;
import myBatis1.model.Dept;
@Repository
public class DeptDaoImpl implements DeptDao {
private static SqlSession session;
static {
try {
Reader reader = Resources.getResourceAsReader("configuration.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
session = ssf.openSession(true); // true : auto commit
reader.close();
} catch (IOException e) {
System.out.println("read file error : "+e.getMessage());
}
}
public List<Dept> list() {
return session.selectList("deptns.list"); // 돌려줄 때 Object형이지만 자동으로 다운 캐스팅 함
} // 원래는 return (Object) session.selectList("deptns.list");
public Dept select(int deptno) {
return session.selectOne("deptns.select",deptno);
}
public int update(Dept dept) {
return session.update("deptns.update",dept);
}
public int delete(int deptno) {
return session.delete("deptns.delete",deptno);
}
}
|
cs |
• namespace 속성
mapper 파일의 <mapper> 태그에서 namespace 속성을 쓰는 이유는, mapper 파일이 많은 경우 sql문 태그의 id 값이 중복될 수 있기 때문에 구분을 위해 사용한다.
- ex)
mapper 파일
<mapper namespace="deptns">
<select id="select" parameterType="int" resultType="dept">
select * from dept where deptno=#{deptno}
</select>
DAO 클래스
public Dept select(int deptno) {
return session.selectOne("deptns.select",deptno); // namespace.id
}
2. Spring으로 DB 연동: 환경설정
- 스프링의 환경설정 파일에서 DB 연동을 할 경우, mybatis의 환경설정 파일에는 DB 연동 관련된 내용이 빠지고 <typeAlias>만 남는다.
- 스프링의 환경설정 파일(root-context.xml)에는 DB 연동을 위한 세 가지 <bean> 태그가 추가된다.
• 스프링 환경설정 파일(root-context.xml)
- DB 연동을 하기 위해서는 스프링의 환경설정 파일인 root-context.xml에 세 가지 <bean>이 등록되어야 한다.
① Data Source 설정
- 스프링에서 jdbc를 통해 오라클에 접속하기 위해서는 Data Source를 구해야 하는데, ComboPooledDataSource 클래스, SimpleDriverDataSource 클래스 등의 클래스로 구할 수 있다.
② SqlSessionFactoryBean 클래스 객체 등록
- SqlSessionFactoryBean 객체로부터 DB 연동 구현에 사용할 SqlSession 객체를 얻기 위해, SqlSessionFactory 클래스를 bean에 등록해야 한다.
- SqlSession 객체를 생성하려면, Data Source와 SQL Mapper 정보가 필요하다. 따라서 앞서 등록된 DataSource를 setter 인젝션으로 참조하고, SQL Mapper가 등록된 Mapper 파일들을 setter 인젝션으로 설정해야 한다.
- 1) Data Source 2) Mybatis의 환경설정 파일(DTO 객체의 alias) 3) Mapper 파일
- DTO 클래스가 2개 이상이어서 Mapper 파일도 2개 이상일 경우, *.xml 형식으로 적어준다.
③ SqlSessionTemplate 클래스 객체 등록
- SqlSessionTemplate이 내부적으로 SqlSession을 구현한다.
- SqlSessionTemplate 클래스는 setter 메소드가 없기 때문에 Setter 인젝션으로 주입이 불가능하다. 따라서 생성자 메소드를 이용하는 Constructor 주입으로 처리해야 한다.
- SqlSessionTemplate 클래스의 객체가 스프링의 환경설정 파일에 등록되어야 DAO 클래스에서 @Autowired로 SqlSession 객체 주입이 가능하다.
• 예시
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
36
37
38
39
40
41
42
43
|
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<!-- <context:property-placeholder location="classpath:jdbc.properties" /> -->
<!-- dataSource -->
<!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
</bean> -->
<!-- Data Source -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</bean>
<!-- 스프링 jdbc 즉 스프링으로 oracle 디비 연결 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:configuration.xml" /> <!-- Mybatis 환경설정 파일 불러옴 -->
<property name="mapperLocations" value="classpath:sql/*.xml" /> <!-- Mybatis의 Mapper 파일 불러옴 -->
</bean>
<bean id="session" class="org.mybatis.spring.SqlSessionTemplate"> <!-- DAO 클래스에서 @Autowired로 SqlSession 객체 주입 가능 -->
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
</beans>
|
cs |
'Spring' 카테고리의 다른 글
94일차: Spring 게시판 환경 설정 / 글 작성 / 글 목록 / 상세 페이지_2021.11.01 (0) | 2021.11.01 |
---|---|
93일차: Spring DB 연동 / Spring 게시판 환경 설정_2021.10.29 (0) | 2021.10.29 |
91일차: Spring_컨트롤러의 어노테이션 / JSON 변환 / 인터셉터 / mybatis와 model1_2021.10.27 (0) | 2021.10.27 |
90일차: Spring Framework Anotation DI / Spring MVC_2021.10.26 (0) | 2021.10.26 |
89일차: Spring Framework 개념 / 환경 구축 / 기초_2021.10.25 (0) | 2021.10.25 |