[Spring 3.0] 스프링 3.0 + MyBatis 연동
by 무작정 개발반응형
개요
이번 글에서는 Spring 3.0 + MyBatis 연동 및 초기 세팅 방법에 대해 정리할 것입니다.
MyBatis는 이전에 정리했던 iBatis의 다음 버전이다. iBatis에서 코딩 방법이 살짝 달라지고 대부분이 비슷하다.
iBatis 관련 글은 이전 iBatis에 정리한 글을 보고 이 글을 보면 도움이 될 것이다.
[ 개발 환경 ]
- JDK 1.8
- STS 3.X
- Spring 3.0
스프링 3.0에 MyBatis 연결
1. 새 프로젝트 생성
- Spring부터는 패키지 경로는 3단계로 해줘야 한다. ex) com.exe.springmybatis
2. 이전 글에서 만든 파일 복사해오기
- CustomDAO, CustomDTO, CustomMain, app-context.xml, pom.xml 복사해오기
- 위의 파일을 복사해오고 조금 수정해줄 것이다.
- mybatis-config.xml이랑 customMapper.xml을 하단에서 만들 것이다.
3. Maven을 이용해서 MyBatis lib(라이브러리) 추가
- pom.xml에 작성한다.
- MyBatis, MyBatis Spring lib 추가하기
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- MyBatis-Spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.3</version>
</dependency>
4. 복사해온 app-context.xml 수정
- Sql Session FactoryBean : 데이터의 소스를 읽음
- Sql Session Template : Sql Session Factory Bean을 읽는다.
<!-- customDAO만 사용하면 밑에 작성한 것들이 다 딸려온다.(제어의 역전:IOC -->
<bean id="customDAO" class="com.exe.springmybatis.CustomDAO"> <!-- dataSource부터 제어의 역전~ -->
<property name="sessionTemplate" ref="sessionTemplate"/> <!-- name은 메소드의 이름이니 내맘대로. 의존성 주입. ref는 밑의 id -->
</bean>
<!-- 아래 SqlSessionFactoryBean을 읽는다. -->
<bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sessionFactory"/>
</bean>
<!-- 데이터 소스를 읽음 -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/> <!-- 얘의 name은 org~안에있으니 바꾸면안됌 -->
<property name="configLocation" value="classpath:/com/exe/springmybatis/mybatis-config.xml"/>
</bean> <!-- dataSource로 Factory만든것 그담 Template을 만들면댐 -->
5. mybatis-config.xml 생성 및 작성 & 등록
- app-context.xml에서 mybatis-config.xml의 위치 정보를 가지고 있어야 한다.
- 위에서 작성한 app-context.xml이 아니라 src/main/resources/META-INF/spring에 있는 app-context.xml이다.
- sql 파일 경로를 설정해준다.
(1) - app-context, xml에 추가
<?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 https://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-3.0.xsd">
<description>Example configuration to get you started.</description>
<!-- MyBatis 추가 -->
<context:component-scan base-package="com.exe.springmybatis" />
</beans>
(2) - mybatis-config.xml 작성
- sql 쿼리가 들어있는 파일을 지칭
- 스프링과 연결할 때
<?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>
<mappers>
<mapper resource="com/exe/mapper/customMapper.xml"/>
</mappers>
</configuration>
6. customMapper.xml 생성 및 작성
- Sql 쿼리문을 작성하는 xml이다. 이전에 iBatis sql을 작성하는 xml과 유사한 개념
- parameterType : 받는 변수의 데이터 타입
- resultType : 결과로 나오는 변수의 데이터 타입
- MyBatis에서는 #{id} = #id# 식으로 쓴다. 이 부분이 iBatis랑 다른 점이다.
<?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.exe.custom">
<insert id="insert" parameterType="com.exe.springmybatis.CustomDTO">
insert into custom (id,name,age) values (#{id},#{name},#{age})
</insert>
<select id="list" resultType="com.exe.springmybatis.CustomDTO">
select id,name,age from custom
</select>
<select id="listOne" parameterType="int" resultType="com.exe.springmybatis.CustomDTO">
<!-- 하나의 데이터 id 읽어오면됌 id의 타입 int이라 int -->
select id,name,age from custom where id=#{id}
</select>
<update id="update" parameterType="com.exe.springmybatis.CustomDTO">
update custom set name=#{name},age=#{age} where id=#{id}
</update>
<delete id="delete" parameterType="int">
delete custom where id=#{id}
</delete>
</mapper>
7. CustomDAO 클래스 작성
- 이전 Java의 JDBC, Spring JDBC랑 비교하면 코드가 매우 간결해졌다. ( 개발자가 편하다!!)
package com.exe.springmybatis;
import java.sql.Connection;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
public class CustomDAO {
private SqlSessionTemplate sessionTemplate;
//의존성 주입 - 이 메서드가 app-context.xml로 가서 프로퍼티 네임에 set이 빼고 들어감
public void setSessionTemplate(SqlSessionTemplate sessionTemplate) { //메소드로 의존성 주입
this.sessionTemplate = sessionTemplate;
}
Connection conn = null;
public void insertData(CustomDTO dto) {
//commondao dao = commondaoimpl로객체생성했어야했는데 spring 3버전부턴 자체 내장해버림
sessionTemplate.insert("com.exe.custom.insert", dto);
}
public void updateData(CustomDTO dto) {
sessionTemplate.update("com.exe.custom.update",dto);
}
public void deleteData(String id) {
sessionTemplate.delete("com.exe.custom.delete",id);
}
public List<CustomDTO> getList(){
List<CustomDTO> lists =
sessionTemplate.selectList("com.exe.custom.list"); //selectList로 읽어옴
return lists;
}
public CustomDTO getReadData(int id){
CustomDTO dto =
sessionTemplate.selectOne("com.exe.custom.listOne",id);
return dto;
}
}
8. CustomMain 클래스 생성 및 작성
- Main클래스를 실행하면 된다.
- 이전과 동일하게 insert를 테스트해볼 것이다. 다른 기능을 사용하려면 insert부분을 주석 처리하고
- 다른 부분을 주석을 삭제하면 된다.
package com.exe.springmybatis;
import java.util.List;
import org.springframework.context.support.GenericXmlApplicationContext;
//콘솔이라 main클래스 만들어
public class CustomMain {
public static void main(String[] args) {
//콘솔에서는 이게 필요
//app-context.xml에서 객체생성한 것을 여기에 의존성 주입
GenericXmlApplicationContext context =
new GenericXmlApplicationContext("app-context.xml");//app-context.xml객체생성
//customDAO라는 이름으로 만들어진 Bean객체를 가져와서 dao에 넣음
CustomDAO dao = (CustomDAO)context.getBean("customDAO");
CustomDTO dto;
//insert
dto = new CustomDTO(); //객체 생성해서 데이터 넣음
dto.setId("241");
dto.setName("홍길동");
dto.setAge(26);
dao.insertData(dto);
System.out.println("MyBatis-insert 완료");
//select
/*
List<CustomDTO> lists = dao.getList();
for(CustomDTO dto1 : lists) { //dto가 위에 쓰여서 중복됨으로 1붙여준거임
System.out.printf("%s %s %d\n",
dto1.getId(),dto1.getName(),dto1.getAge()); //%d 인트값 %s 스트링값
}
System.out.println("select 완료.");
*/
//OneSelect
/*
dto = dao.getReadData(777);
if(dto!=null) { System.out.printf("%s %s %d\n",
dto.getId(),dto.getName(),dto.getAge());
}
System.out.println("Oneselect 완료.");
*/
//update
/*
dto = new CustomDTO();
dto.setId(777);
dto.setName("윈터");
dto.setAge(24);
dao.updateData(dto);
System.out.println("update 완료.");
*/
//delete
/*
dao.deleteData(555);
System.out.println("delete 완료");
*/
}
}
9. 실행 화면
- insert를 할 것이고, id=242 / name:홍길동 / age:26을 추가할 것이다.
- CustomMain클래스를 실행하고 cmd에서 select * from custom;을 해준다.
데이터가 추가되었다면 정상적으로 Spring에 MyBatis가 연결된 것이다.
기존 예제를 통해 Java의 JDBC / Spring JDBC / Spring + MyBatis를 같은 예제로 진행하였다.
확실히 MyBatis를 쓰니 코드가 간결해졌다.
자세한 소스코드는 하단의 GitHub 링크 참고
반응형
'Back-End > Spring Legacy' 카테고리의 다른 글
[Spring3.0] AOP (관점 지향 프로그래밍) (4) | 2022.03.28 |
---|---|
[Spring 3.0] LomBok 으로 getter/setter 생성 (0) | 2022.03.28 |
[Spring 3.0] 스프링JDBC (0) | 2022.03.26 |
[Spring 3.0] Maven Repository(메이븐), Java의 JDBC (0) | 2022.03.26 |
[Spring 3.0] 의존성 주입(DI) - 수동 (0) | 2022.03.24 |
블로그의 정보
무작정 개발
무작정 개발