Spring

[Part 1] MyBatis 연동 #8

충 민 2023. 1. 13. 00:38

이번 MyBatis까지가 설정에 대한 내용이다. 빨리 끝내고 코딩을 하고 싶다...

MyBatisSql Mapping 프레임워크다.

  • SQL과 Object간의 관계를 매핑해주는 역할
  • JDBC코드에 비해 처리하는 부분이 간결해지고, close 처리등이 지원

Spring에서의 사용

  • 스프링은 MyBatis와의 연결을 위한 mybatis-spring 라이브러리를 이용해서 연동처리

 

 

 

 

 

JPA는 관계지향의 세계를 객체지향의 세계에 접목하는 느낌? 이고

MyBatis는 유틸리티의 성격이 강하다. 

 

MyBatis의 장점 : SQL을 그대로 사용가능하다.

                  단점 : JPA보다는 성능이 조금 떨어진다.

 

https://mvnrepository.com/artifact/org.mybatis/mybatis/3.5.11

 

 

 

 

위의 사이트에 접속하여 dependency를 복사하여 porm.xml에 넣는다.

ctrl+s를 하면 자동으로 build를 한다.

 

그리고 mybatis spring 또한 라이브러리에 추가해보자

https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/2.0.6

 

 

dependency를 복사하여 porm.xml에 넣는다.

 

 

그리고 또 설정해주어야하는게 jdbc모듈과 tx모듈을 관리해야한다.

 

tx : 트렌젝션 관리해주는 모듈

 

 

 

위의코드를 복사하여 test부분을 노랗게 칠한 부분으로 고쳐주면 끝!

 

이번엔 SqlSessionFactory의 설정이다.

 

 root-context.xml에 MyBatis설정

MyBatis의 핵심 객체는 SqlSessionFactory타입의 객체

SqlSessionFactoryBean은 내부적으로 MyBatis의 SqlSessionFacory를 생성한다.

 

root-context.xml에 밑의 코드를 추가하자.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
</bean>

 

그리고 또 마찬가지로 Test를 해보자

이미 만들어둔 DataSouceTests.java에서

@Autowired
private SqlSessionFactory sessionFactory;
	



@Test
public void testConnection2() {
		try(SqlSession session = sessionFactory.openSession();
				Connection con = session.getConnection()){
			log.info(session);
			log.info(con);
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}

 

 

위 코드를 추가하여 오류가 나는지 확인을 한다.

 

 

이렇게 뜨면 정상 작동 하는 것이다.

 

이제 인터페이스를 잡아주자

먼저, mapper라는 패키지와 TimeMapper라는 인터페이스를 생성해준다.

TimeMapper인터페이스의 코드는

package org.zero.mapper;

import org.apache.ibatis.annotations.Select;

public interface TimeMapper {
	
	// ;없어야한다
	@Select("select sysdate from dual")
	String getTime();
}

 

 

코드를 작성하셨다면 root-context.xml을 가서

 

위와같이 체크한 후

<mybatis-spring:scan base-package="org.zero.mapper"/>

이 코드도 root-context.xml에 추가해준다.

 

다 해주셨다면 똑같이 테스트를 해보자.

이 테스트가 가장 중요하다고하니 꼭꼬ㄲ꼭 해보길 바란다.

클래스 하나를 생성해주고

package org.zero.persistance;
import java.sql.Connection;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.zero.mapper.TimeMapper;

import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class TimeMapperTests {
	@Autowired
	private TimeMapper timemapper;
	
	@Test
	public void testTime1() {
		log.info(timemapper.getTime());
	}
}

 

 

실행을 시켜서 시간이 나오면 성공이다.

 

 

 

성공!

여기까지가 mybatis와 spring이 연동이 된 것이다.

 

사실 어노테이션으로도 가능하지만 코드가 길어지게된다면 지저분해지고 관리가 힘들다

그리고 어노테이션이 정적이라서 동적으로 만들기 힘들어진다.

 

다시 돌아가서

interface가 기준이 되어 xml을 생성할 것이다.

 

폴더를 생성할 때 가능하면 하나씩 생성하자. 그리고 XML파일도 인터페이스파일과  

이름을 동일하게!

 

 

 

 

xml로 확인할 getTime2를 생성해준다.

 

그 다음에 XML파일에 DTD라는 것을 넣어줄 것이다. DTD는 쉽게말해 코드를 자동완성 시켜주는 것이다.

<?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="org.zero.mapper.TimeMapper">
 	<select id="getTime2" resultType="string">
 		select sysdate from dual
 	</select>
 </mapper>

 

이제 세팅이 되었으니 test코드를 TimeMapperTests.java에서 확인을 해보자.

 

@Test
public void testTime2() {
    log.info(timemapper.getTime2());
}

위 코드로 실행을 하면?

 

아까와 동일하게 결과가 잘 찍힌다 ㅎㅎ

거의 다 왔다.

 

 

그 다음은 두가지 설정이 추가되는데 주의해야한다.

  • 라이브러리 추가
  • 설정 
    • DataSource 설정 변경
    • 프로퍼티 파일을 반드시 추가

위의 리스트만 하면 된다.

 

log4jdbc-log4j2 설정을 해보자.

https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1/1.16

 

오래된 버전이지만 어쩔 수 없다.

이전 dependency들과 동일하게 porm.xml에 추가해준다.

 

 

 

log4jdbc.log4j2.properties
0.00MB

 

이렇게 두군데에 프로퍼티 파일을 확실하게 넣어준다.

 

 

 

 

그리고 root-context.xml의 경로만 바꾸어주면 끝 ! 두근 두근 마지막 테스트다.

 

 

성공! 다음 글부터는 드디어 코딩한다~~ 설정 끝!