무작정 개발.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 추가
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에 추가

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 쿼리가 들어있는 파일을 지칭
  • 스프링과 연결할 때
mybatis-config.xml 위치
mybatis-config.xml 위치
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랑 비교하면 코드가 매우 간결해졌다. ( 개발자가 편하다!!)
java
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부분을 주석 처리하고
  • 다른 부분을 주석을 삭제하면 된다.
java
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 링크 참고

 

블로그의 프로필 사진

블로그의 정보

무작정 개발

무작정 개발

활동하기