Spring

MyBatis

0304호 2023. 2. 3. 18:07

MyBatis란?

- MyBatis 는 개발자가 지정한 SQL, 고급 매핑을 지원하는 프레임워크이다.

- MyBatis 는 JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거한다.

- MyBatis 는 복잡한 JDBC코드를 걷어내며 깔끔한 소스코드를 유지한다.

-MyBatis 는 DAO계층을 대신한다.

-MyBatis 는 기존 DAO의 Interface의 구현클래스를 xml파일이 대신한다.

-스프링에서 사용하려면 MyBatis-Spring module을 다운로드 받아야 한다

 

  • MyBatis는 기존 DAO계층을 대신한다.


기존 JDBC프로그램과  MyBatis의 차이점

 


MyBatis의 사용방법

MyBatis는 SpringFramework에서 제공하는게 아니라 모듈을 추가해야한다.

(Mybatis Module & MyBatis-Spring Module)  버전은 올린년도로 비교해서 호환성을 대충 맞춰준다.

pom.xml에 MVNRepository.com에서 가져온 코드 추가 후 MavenUpdate

	<!-- MyBatis 마이바티스 설정 -->
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.6</version>
	</dependency>

	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>2.0.6</version>
	</dependency>

MyBatis사용시 기본적으로 Spring-JDBC라이브러리가 필요하다.

 

1. root-context.xml에서 namespaces에 있는 myBatis 활성화

2. 활성화 된건지 확인 (root-context의 beans에  xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"확인)

3. SqlSessionFactory 빈 생성


 MyBatis의 경우 interface와 xml파일은 반드시 이름이 동일해야 한다


테스트 진행

잘 작동하는지 확인하기위해서 테스트를 진행해봤다.

-src/test/java폴더에 com.simple.basic.mapper패키지를 생성했다.


  •  MyBatis의 경우 interface와 xml파일은 반드시 이름이 동일해야 한다

com.simple.basic.mapper패키지안에 TestMapper 인터페이스 생성사용할 메서드 생성

public interface TestMapper {
	public String getTime();
}

동일한 이름xml파일생성

<?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.simple.basic.mapper.TestMapper">
	<!-- id는 인터페이스의 메서드명 resultType = 반환타입 -->
	<select id="getTime" resultType="String">
		select now()
	</select>
</mapper>

basic폴더에 테스트용 메서드를 호출할 class생성 (JDBCMybatis로 만듬)


클래스에 @RunWith(SpringJUnit4ClassRunner.class)   (JUnit으로 테스트환경을 구성하는 용도) 추가

@ContextConfiguration(동작시킬 Spring 설정파일경로)  추가 

//JUnit으로 테스트환경을 구성
@RunWith(SpringJUnit4ClassRunner.class)	
//동작시킬 Spring 설정파일
@ContextConfiguration("file:src/main/webapp/WEB-INF/config/root-context.xml")		
public class JDBCMybatis {

}

테스트할 메서드 생성 전 필요한 객체들 호출

	//root-context의 (id가 ds인 hikariDataSource를 연결해둔) sqlSessionFactory Bean 호출
	@Autowired
	SqlSessionFactoryBean sqlSessionFactory;
	
	//xml파일 연결
	@Autowired
	TestMapper testMapper;

메서드 생성

@Test//테스트코드로 실행함
	public void testCode01() {
		//마이바티스 핵심 객체
		System.out.println(sqlSessionFactory);
	}
	
	//xml파일의 getTime메서드 호츨(TestMapper.xml의 id가 getTime인 select태그 호출)
	@Test//테스트코드로 실행함
	public void testCode02() {
		String time = testMapper.getTime();
		System.out.println(time);
	}

결과

더보기

sqlSessionFactory 와 TestMapper.xml에서 작성한 쿼리문( select now() )

즉 teseCode01과 testCode02 메서드 두개가 순차적으로 동작하는걸 확인할 수 있다.