본문 바로가기
카테고리 없음

IBATIS와 MYBATIS 차이점

by cook_code 2023. 5. 18.
반응형

IBATIS와 MYBATIS 차이점

 

[iBATIS/MyBatis]iBATIS와 MyBatis의 차이

INTROiBATIS( ~ 2.3)의 버전이 변경되면서 MyBatis(2.5 ~ )로 변경이 되었는데, 버전 이외에도 변경점이 꽤 있는것 같아 정리하고자 한다. 명칭 변경 이유Apache project팀에서 google code 팀으로 이동하면서 명

sdevstudy.tistory.com

  • 명칭 변경 이유: Apache project팀에서 google code 팀으로 이동하면서 명칭 변경
  • java 요구 사항: JDK 1.4 이상 → JDK1.5 이상 (MyBatis 3.2 이상 버전은 JDK 1.6 이상 요구)
  • 패키지 내부 구조: com.ibatis.*  org.apache.ibatis.*
  • pom.xml 설정

<!-- MyBatis pom.xml -->
<dependency>
    <groupid>org.mybatis</groupid>
   <artifactid>mybatis</artifactid>
   <version>3.4.5</version>
</dependency>
 
<dependency>
   <groupid>org.mybatis</groupid>
   <artifactid>mybatis-spring</artifactid>
    <version>1.3.1</version>
</dependency>
  • annotation 도입: sqlMapClient DI 설정이 필요 → Bean id sqlSessionFactory, sqlSesstionTemplate만 지정
  • namespace 변경 

iBATIS : <sqlMap namespace="memberDAO">

MyBatis : <mapper namespace="com.tistory.mapper.MemberMapper">

  • Dynamic Query
iBATIS MyBatis
태그 설명 태그 설명
 <isEqual>  property 값이 같을때만 쿼리 실행   <if>와
<choose>, <when>, <otherwise>
 일반 개발언어의 
if or if ~ else와 동일
 <isNotEqual>  property 값이 같지 않을 때만 쿼리 실행 
 <isGreaterThan>  property 값이 비교값보다 클 경우 쿼리 실행 
<isGreaterEqual>   property 값이 비교값보다 같거나 클 경우 쿼리 실행
 <isLessEqual>  property 값이 비교값보다 작거나 같을경우 쿼리 실행
 <isPropertyAvailable>  property 값이 유효할 경우 쿼리 실행
 <isNotPropertyAvailable>  property 값이 유효하지 않을 경우 쿼리 실행
 <isNull>  property 값이 null일 경우 쿼리 실행 
<isNotNull>   property 값이 null이 아닐 경우 쿼리 실행 
<isEmpty>   property 값이 비어있을경우 쿼리 실행
<isNotEmpty>   property 값이 비어있지 않을경우 쿼리 실행 
 <isParameterPresent>  parameter가 있을경우 쿼리 실행
<isNotParameterPresent>   parameter가 없을경우 쿼리 실행
<iterate>   배열 타입의 파라미터를 받을 때 활용  <foreach>  배열 타입의 파라미터를 받을 때 활용 
<dynamic>   하위 태그에 일치하는 내용이 존재할 경우   where절을 붙인다. <where>, <trim>   iBATIS의 <dynamic>과 같이 조건에 따라 where절을 추가할 때 사용
     <set>  동적으로 update 구문을 만들 때 사용
     <bind>  변수를 생성하는 태그 
  • sqlMap.xml 내부 구조 변경:

- parameterMap -> parameterType으로 변경

- dtd 변경: http://mybatis.org/dtd/mybatis-3-mapper.dtd 

- 사용 용어 변경

 

구분 사용
IBATIS #Parameters#
$Parameters$
MYBATIS #{Parameters}
${Parameters}

1. #Parameters#, #{Parameters} 변수를 이용한 바인딩 처리 

- 변수 자료형이 String 이면 작은 따옴표 처리 

- PreparedStatement를 사용

- 장점: 코드의 재사용성, 변수를 Bind함으로써 sql injection 예방 가능

2. $Parameters$, ${Parameters} 변수의 자료형과 관계없이 작은따옴표를 사용하지 않는다. 

- Statement를 사용

- 장점: 변수에 저장된 값을 bind하지 않고 statement를 사용하게 되면서 쿼리문에 들어가는 값을 수정 가능

- 단점: sql injection 공격 위험 노출, 쿼리문 변경 시 쿼리문을 다시 파싱하므로 속도 저하 문제가 있다. 

반응형