728x90
Oracle 연습용 계정인 SCOTT 계정의 DEPT 테이블 정보를 조회/삽입/수정/삭제를 해보자
① 의존성 설정
pom.xml
에 5개의 jar 설정
ojdbc6_g.jar, mybatis.jar, spring-jdbc.jar, spring-mybatis.jar, commons-dbcp2.jar
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</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>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.5.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.jslsolucoes/ojdbc6 -->
<dependency>
<groupId>com.jslsolucoes</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
② jdbc.properties 작성 및 등록
jdbc.properties
작성
# src/main/resources 폴더에 com/config/jdbc.properties
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=SCOTT
jdbc.password=TIGER
- 스프링의 configuration xml 파일에 등록
<context:property-placeholder location="classpath:com/config/jdbc.properties"/>
③ DB 연동하는 DataSource 설정
스프링은 DataSource
를 통해 Connection을 제공한다.
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
④ com.dto.DeptDTO 작성
@Alias
를 통해 com.dto.DeptDTO 를 DeptDTO
별칭을 지정한다. configuration xml 파일에서 별칭 등록(⑥)
@AllArgsConstructor
@Data
@Alias("DeptDTO")
public class DeptDTO {
int deptno;
String dname;
String loc;
}
⑤ DeptMapper.xml 작성
src/main/resources 폴더에 com/config/DeptMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="DeptMapper">
<select id="deptList" resultType="DeptDTO">
select deptno, dname, loc
from
dept
order by deptno
</select>
<insert id="deptAdd" parameterType="DeptDTO">
insert into dept(deptno,
dname, loc)
values( #{deptno}, #{dname}, #{loc})
</insert>
<update id="deptUpdate" parameterType="DeptDTO">
update dept
set
dname=#{dname}, loc=#{loc}
where deptno=#{deptno}
</update>
<delete id="deptDelete" parameterType="int">
delete from dept
where deptno=#{deptno}
</delete>
</mapper>
⑥ SqlSessionFactory 역할의 SqlSessionFactoryBean 등록
configuration xml 파일에 Mapper
를 등록하고 별칭
을 지정한다.
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations">
<list>
<value>classpath:com/config/DeptMapper.xml</value>
</list>
</property>
<property name="typeAliases">
<list>
<value>com.dto.DeptDTO</value>
</list>
</property>
</bean>
⑦ SqlSession 역할의 SqlSessionTemplate 빈 등록
setter
메서드가 제공되지 않아 생성자 <constructor-arg>
로 주입해야 한다.
<bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sessionFactory" />
</bean>
⑧ DAO, Service, Main 작성 후 xml 파일에 등록
Component-scan
을 이용하여 등록한다.
<context:component-scan base-package="com.*" />
이 때, 스캔 할 빈에 어노테이션 필수
@Repository
public class DeptDAO {
...
}
@Service("deptService")
public class DeptServiceImpl implements DeptService {
...
}
⑨ DAO에서 SqlSessionTemplate 주입받고 사용
@Repository("deptDAO")
public class DeptDAO {
@Autowired
SqlSessionTemplate session;
public List<DeptDTO> deptList() {
List<DeptDTO> list = session.selectList("DeptMapper.deptList");
return list;
}
public int deptAdd(DeptDTO dto) {
int n = session.insert("DeptMapper.deptAdd", dto);
return n;
}
public int deptUpdate(DeptDTO dto) {
int n = session.update("DeptMapper.deptUpdate", dto);
return n;
}
public int deptDelete(int deptno) {
int n = session.delete("DeptMapper.deptDelete", deptno);
return n;
}
}
💡 이전 Mybatis에서는 명시적으로 commit 지정했지만 Spring에서는 자동으로 commit 처리된다.
Main
public class DeptMain {
public static void main(String[] args) {
GenericXmlApplicationContext ctx
= new GenericXmlApplicationContext("classpath:com/config/spring_config.xml");
DeptService service = ctx.getBean("deptService", DeptService.class);
// 삽입
// DeptDTO xxx = new DeptDTO(50, "인사", "서울");
// int n = service.deptAdd(xxx);
// 수정
// DeptDTO xxx2 = new DeptDTO(50, "사무", "인천");
// int n = service.deptUpdate(xxx2);
// 삭제
// int n = service.deptDelete(50);
List<DeptDTO> list = service.deptList();
for(DeptDTO dto: list) {
System.out.println(dto);
}
}
}
728x90
'WebServer > Spring' 카테고리의 다른 글
[Spring] Spring MVC 구조와 컴포넌트 (0) | 2023.09.16 |
---|---|
[Spring] 트랜잭션 처리 (TransactionManager) (1) | 2023.09.15 |
[Spring] 빈 객체 스캔 (component-scan) (0) | 2023.09.14 |
[Spring] AOP (Aspect Oriented Programming) (0) | 2023.09.14 |
[Spring] SpEL (Spring Expression Language) (0) | 2023.09.14 |