[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 추가하기



html <!-- 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을 읽는다.
html <!-- 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에 추가

html<?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 쿼리가 들어있는 파일을 지칭
- 스프링과 연결할 때

html<?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랑 다른 점이다.
html<?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랑 비교하면 코드가 매우 간결해졌다. ( 개발자가 편하다!!)
javapackage 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부분을 주석 처리하고
- 다른 부분을 주석을 삭제하면 된다.
javapackage 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 링크 참고
블로그의 정보
무작정 개발
무작정 개발