MyBatis란?

흔히 SQL 매핑 프레임워크로 분류되는데, 개발자들은 JDBC 코드의 복잡하고 지루한 작업을 피하는 용도로 많이 사용합니다. 

 

전통적인 JDBC 프로그램의 VS MyBatis

전통적인 JDBC 프로그램 MyBatis
● 직접 Connection을 맺고 마지막에 close()
 PerparedStatement 직접 생성 및 처리
 PerparedStatement의 setXXX() 등에 대한 모든 작업을 개발자가 처리
 SELECT의 경우 직접 ResultSet 처리
 자동으로 Connection, close() 기능
 MyBatis 내부적으로 PerparedStatement 처리
 #{prop}와 같이 속성을 지정하면 내부적으로 자동 처리
 리턴 타입을 지정하는 경우 자동으로 객체 생성 및 ResultSet 처리

 

Spring 연동 작업

MyBatis 관련 라이브러리 추가 

  • mybatis/mybatis-spring : MyBatis와 스프링 연동용 라이브러리
  • spring-jdebc/spring-tx : 스프링에서 데이터베이스 처리와 트랜잭션 처리 
  • 더보기
    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.4.6</version>
    </dependency>
    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis-spring</artifactId>
       <version>1.3.2</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
    </dependency>

SQLSessionFactory

MyBatis에서 가장 핵심인 객체SQLSession이라는 존재와 SQLSessionFactory입니다.

SQLSessionFactory의 이름에서 보듯이 내부적으로 SQLSession이라는 것을 만들어 내는 존재인데,

개발에서는 SQLSession을 통해서 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴 받는 구조로 작성하게 됩니다 

 

스프링에 SqlSessionFactory를 등록하는 작업은 SqlSessionFactoryBean을 이용합니다. 패키지명을 보면 MyBatis의 패키지가 아니라 스프링과 연동 작업을 처리하는 mybatis-spring 라이브러리의 클래스임을 알 수 있습니다

 

스프링과의 연동 처리

이대로도 JDBC 코딩이 가능하지만 좀 더 편하게 작업하기 위해서는 SQL을 어떻게 처리할 것인지를 별도의 설정을 분리해 주고, 자동으로 처리되는 방식을 이용하는 것이 좋습니다. 이를 위해서는 MyBatis의 Mapper라는 존재를 작성해 줘야 합니다.

 

Mapper인터페이스

Mapper를 작성하는 작업은 XML을 이용할 수도 있지만. 최소한의 코드를 작성하는 Mapper 인터페이스를 사용해 보겠습니다. 

 

1. org.zerock.mapper라는 패키지를 만들고, TimeMapper라는 인터페이스를 추가합니다

package org.zerock.mapper;

import org.apache.ibatis.annotations.Select;

public interface TimeMapper {
	@Select("SELECT sysdate FROM dual")
	public String getTime();
	
	public String getTime2();
}

2. Mapper 설정

1. <mybatis:scan>

가장 간단한 방식

2. XML mapper

SQL이 복잡하거나 길어지는 경우에는 어노테이션보다는 XML을 이용하는게 더 추천합니다

XML을 작성해서 사용할 때에는 XML 파일의 위치XML파일에 지정하는 namespace 속성이 중요한데, 

XML 파일 위치의 경우 Mapper 인터페이스가 있는 곳에 같이 작성되거나 src/main/resources 구조에  XML을 저장할 폴더를 생성할 수 있습니다

 

XML  파일 내용

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/did/mybatis-3-mapper.dtd">
	<mapper namespace="org.zerock.mapper.TimeMapper">
		<select id="getTime2" resultType="string">
		SELECT sysdate FROM dual
		</select>
	</mapper>

 

End. 연결

  • root-context.xml의 경우
    • 우선 root-context.xml 파일을 열고, 아래 탬에서 Namespaces 항목에서 mybatis-spring탭을 선택
    • 더보기
      <mybatis-spring:scan base-package="org.zerock.mapper"/>
  • Rootconfig.java의 경우
    • 더보기
      @ComponentScan(basePackages= {"org.zerock.sample"})

...

정리하느라 수업 놓쳐버렸다

'Spring' 카테고리의 다른 글

[Spring] 개발 환경 구축  (0) 2022.08.24
[Spring] 스프링 프레임워크(Spring Framework)란 뭘까  (0) 2022.08.23

+ Recent posts