무작정 개발.Vlog

[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

 

MyBatis
MyBatis

 

 

스프링 3.0에 MyBatis 연결

1. 새 프로젝트 생성

  • Spring부터는 패키지 경로는 3단계로 해줘야 한다. ex) com.exe.springmybatis

1. 새 프로젝트 생성1. 새 프로젝트 생성
1. 새 프로젝트 생성

 

2. 이전 글에서 만든 파일 복사해오기

  • CustomDAO, CustomDTO, CustomMain, app-context.xml, pom.xml 복사해오기
  • 위의 파일을 복사해오고 조금 수정해줄 것이다.
  • mybatis-config.xml이랑 customMapper.xml을 하단에서 만들 것이다.

SpringMybatis 프로젝트 구조
SpringMybatis 프로젝트 구조

 

3. Maven을 이용해서 MyBatis lib(라이브러리) 추가

  • pom.xml에 작성한다.
  • MyBatis, MyBatis Spring lib 추가하기

MyBatis 3.5.9 lib추가
MyBatis 3.5.9 lib추가
MyBatis Spring 1.3.3 lib 추가
MyBatis Spring 1.3.3 lib 추가
MyBatis Spring 1.3.3 lib 추가
MyBatis Spring 1.3.3 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에 추가

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

mybatis-config.xml 위치
mybatis-config.xml 위치

<?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;을 해준다.

main클래스 실행 후 콘솔 결과
main클래스 실행 후 콘솔 결과
cmd에서 custom테이블에 추가된 데이터 검색
cmd에서 custom테이블에 추가된 데이터 검색

 

데이터가 추가되었다면 정상적으로 Spring에 MyBatis가 연결된 것이다.


기존 예제를 통해 Java의 JDBC / Spring JDBC / Spring + MyBatis를 같은 예제로 진행하였다.

확실히 MyBatis를 쓰니 코드가 간결해졌다.

 

 

자세한 소스코드는 하단의 GitHub 링크 참고

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기