IBATIS와 MYBATIS 차이점
- 명칭 변경 이유: 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 공격 위험 노출, 쿼리문 변경 시 쿼리문을 다시 파싱하므로 속도 저하 문제가 있다.
반응형