[MyBatis]란?

앞서 사용해 보았던 Jdbc-Template도 상당히 좋은 방식 중 하나지만 이것보다 좀더 편하게 데이터베이스 엑세스를 할 수있는 추가 프레임워크가 있습니다.

MyBatis라는건데요, 이것은 꼭 스프링이 아니더라도 스프링 뿐만아니라 다른 언어와도 결합할 수 있는 프레임워크이기 때문에 배워둔다면 스프링 프레임워크가 아닌 다른언어로 웹 어 플리케이션을 제작할때도 활용할수 있는 추가 프레임워크입니다.

스프링에서 제공하는것은 아니고 iBatis라는곳에서 제공을 했지만 구글이 인수를하면서 MyBatis라는 이름으로 새롭게 지원하고있는 프레임워크입니다.

 

마이바티스를 사용했을때 어떠한 방식에 구해받지않고 공통적인 장점을 두가지를 나열해 보겠습니다.

1. 쿼리문을 수행해주는 PreparedStatement를 직접생성하지않고 해당 기능이 내부적으로 자동으로 처리됩니다.

?처리마저도 #{필드명} 매핑을통해서 자동으로 처리가 됩니다

2. RowMapper로 익명클래스를쓰느니 내부클래스를 쓰느니 했던것들을 mybatis가 내부적으로 다 처리해줘서 간편함을 얻을 수 있습니다.

 

스프링에서 사용하기 위해서는 Mybatis-Spring module을 다운로드 받아야 합니다.

Mybatis를 사용하는 방식으로는 크게 두가지로 나뉩니다

1. SqlSessionTemplate - MyBatis3.0 이전

2. MapperInterface - Mybatis 3.0버전

 

 

 

[SqlSessionTemplate]

SqlSessionTemplate는 Mybatis쿼리문을 수행해주는 역할을 합니다.

MyBatis3.0 이전에 사용하던 방식이며 DAO클래스에 직접 SqlSession객체를선언하고 @Autowired로 의존주입하여 쿼리문을 수행 하는 방식입니다.

↓ root-context.xml에 SqlSessionFactory를 등록해야합니다.

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

DAO 메서드 인자값으로 "key" key이름을 부여하며 쿼리문을 수행하는 xml파일의 <select>혹은 <insert> <update> <delete> 태그의 id속성에 동일한 key이름으로 지정  으로 DAO의 메서드와 연동합니다.

 

 

[MapperInterface]

MapperInterface는 Mybatis 3.0버전으로, DAO클래스를 쿼리문을 수행해주는 Mapper xml에서 구현합니다.

SqlSessionTemplate방식을 사용할때 작성하는 DAO클래스는 Controller->Service 로 부터 DAO 인터페이스에 선언된 추상메서드를 호출받았을때 추상메서드의 기능을 구현해 주는 클래스 입니다.

DAO클래스에서는 메서드를 통해 쿼리문을 실행하여 DB정보수행 까지 도달하기위한 쿼리문 수행 메서드를 구현합니다.

MapperInterface는 DAO클래스를 생략하고 Mapper xml파일과 DAO인터페이스를 직접 연결해주는 방식입니다.

 ↓ root-context.xml에 <mybatis-spring:scan basepacage="인터페이스의 패키지경로" />를 등록해야합니다.

<mybatis-spring:scan base-package="com.spring.database.mybatis.score.repository"/>

 ↑ 해당경로의 인터페이스를 찾고 인터페이스와 연결되있는 Mapper xml을 컨테이너에 빈등록 해줍니다

Mapper xml에서 <mapper>태그로 namespace를 지정하는데 이곳에 패키지경로.DAO인터페이스명 으로 선언해주면

해당 DAO인터페이스와 연결이 됩니다.

<mapper>태그안에는 반환되는 객체들을 미리 선언하고 <select>,<insert>,<update>,<delete>태그를 사용하여 태그안에 수행할 쿼리문을 작성합니다.

각 쿼리문 태그의 id명을 DAO인터페이스의 추상메서드 이름으로 지정합니다.

인터페이스를 구현받은 클래스에서 추상메서드를 오버라이딩 하는것과 같습니다.  

+ Recent posts