BackEnd/Spring

iBatis vs MyBatis

SambaLim 2019. 1. 14. 20:55
IBatis vs MyBatis

Apache project 팀에서 google code 팀으로 이동하면서 명칭이 변경.

01. MyBatis란?

[MyBatis 설명]

  • 개발자가 지정한 SQL, 저장프로시저(쿼리의 집합) 그리고 몇가지 고급 맵핑을 지원하는 퍼시스턴스 프레임워크이다. MyBatis는 JDBC(Java DataBase Connectivity)로 처리하는 상당부분의 코드와 파라미터 설정 및 결과 맵핑을 대신해준다. MyBatis는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO를 맵핑하기 위해 XML과 애노테이션(참조링크 참조)을 사용할 수 있다.

[MyBatis 특징]

  • 간단하다
  • 생산성 : 코드의 양이 줄고 설정이 간단하다.
  • 성능 : 데이터 접근 속도를 높여주는 Join 맵핑을 한다는 구조적 강점이 있다. 데이터를 가져오는 방식이 다양하여 다양한 전략을 세울 수 있다.
  • 유지보수성
  • SQL문이 소스 코드로부터 완전 분리

 

iBatis / MyBatis 차이점

  1. Java 요구버전 iBatis에서는 JDK 1.4 이상 → MyBatis에서는 JDK 1.5 이상 사용 가능.
  2. 패키지 내부 구조가 변경 com.ibatis.* → org.apache.ibatis.*
  3. sqlMap.xml 내부 구조가 변경되었음.
  4. parameterMap 사용불가 → parameterType으로 대체
  5. dtd가 변경 (“http://mybatis.org/dtd/mybatis-3-mapper.dtd”)
  6. 사용 용어 변경 : SqlMapConfig → Configration / sqlMap → Mapper / resultClass → resultType
  7. MyBatis lib 별도 제공
  8. Annotation 도입 : sqlMapClient DI 설정 불필요, 간편해짐, Bean id sqlSession Template만 지정하면 됨.
  9. rowHandler 대체
  10. xml및 대량 데이터 처리를 위해 사용되었던 rowHandler가 삭제
  11. rowHandler → resultHandler로 변경됨
  12. 자바 annotation을 사용하여 xml을 사용하지 않고 자바로만 할 수 있게 됨.
  13. 자바 선언 보다 xml 선언이 우선순위릘 가짐.
  14. 네임스페이스 방식 변경 : 네임스페이스 사용 필수, userStatementNameSpace 설정 제거
  15. 동적 SQL - XML 엘리먼트 : if, choose(when, otherwise), trim (whre, set), foreach
  16. 동적 SQL - Provider annotation
  17. 캐시지원
  18. (스프링 연동모듈) mapper 자동 검색

[변경된 속성 종합]

iBatisMyBatis비고
com.ibatis.*org.apache.ibatis.패키지 구조 변경
SqlMapConfigConfigration용어변경
sqlMapmapper용어변경
sqlMapClientsqlSession구문대체
rowHandlerresultHandler구문대체
resultHandlerSqlSessionFactory구문대체
parameterMap, parameterClassparameterType속성통합
resultClassresultType용어변경
#var##{var}구문대체
$var$${var}구문대체
, 구문대체

 

전환 툴

https://github.com/mybatis/ibatis2mybatis

전환 팁

  1. isEqual -> if 변경
  2. before :
<isEqual prepend="AND" property="searchCondition" compareValue="1"></isEqual>

 

  1. after :
<if test="searchCondition== '1'">AND</if>
    #iBatis
    <isNotEmpty prepend="AND" property="searchWord">
          <![CDATA[        a.INQIRE_INFO LIKE '%' || #searchWord# || '%' ]]>
    </isNotEmpty>
    #MyBatis
    <if test="searchWord != null and searchWord != ''">        
          <![CDATA[ AND        a.INQIRE_INFO LIKE '%' || #{searchWord} || '%' ]]>
    </if>

 

  1. resultMap vs resultType : https://okky.kr/article/282645
  2. (parameter/result)Class → (parameter/result) Type → mapper-config 내에 있는 것을 제외하고 정확한 주소를 적어주어야함
  3. sqlMap → mapper
  4. #code# → #{code}
  5. resultMap class → type

'BackEnd > Spring' 카테고리의 다른 글

Spring jstl 추가하기  (1) 2019.03.09
Spring Controller 메소드 리턴타입 정리  (1) 2019.03.08
VS code에서 Spring 시작하기  (0) 2019.03.02
제어의 역전 (IoC)  (0) 2019.01.28
STS 설치하기  (0) 2019.01.27