본 가이드는 MyBatis와 iBatis의 차이점을 설명한다.
iBatis | MyBatis | 비고 |
---|---|---|
com.ibatis.* | org.apache.ibatis.* | 패키지 구조 변경 |
SqlMapConfig | Configration | 용어변경 |
sqlMap | mapper | 용어변경 |
sqlMapClient | sqlSession | 구문대체 |
rowHandler | resultHandler | 구문대체 |
resultHandler | SqlSessionFactory | 구문대체 |
parameterMap, parameterClass | parameterType | 속성 통합 |
resultClass | resultType | 용어변경 |
#var# | #{var} | 구문대체 |
$var$ | ${var} | 구문대체 |
<isEqual> , <isNull> | <if> | 구문대체 |
iBatis | MyBatis |
---|---|
com.ibatis.* | org.apache.ibatis.* |
패키지 구조는 변경되었으나 기존에 iBatis 패키지명은 그대로 사용한다.
Maven Dependency Information 예시
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.0</version> </dependency>
iBatis | MyBatis |
---|---|
<sqlMap namespace=“User”> | <mapper namespace=“myBatis.mapper.UserMapper”> |
실제 자바쪽에서 호출할때도 길게 호출하여야 한다.
list = session.selectList("myBatis.mappers.UserMapper.getUserList");
이런 경우에 위에서 이야기한 자바 애노테이션 (@Select)을 사용해서 mapper 파일을 xml이 아니고 자바로 만들어놓으면 코드힌트까지 사용해서 편하게 쓸 수 있다.
UserMapper mapper = session.getMapper(UserMapper.class); list = mapper.selectUserList();
기존에 조건에 따라 변하는 쿼리를 만들기 위해서 사용되던 태그들이 변경되었다. 조금더 직관적으로 바뀌었고 해당상황(Update, Select)등에 맞춰서 사용할 수 있는 태그들도 추가되었다.
참고) #{var}와 ${var}의 차이는 prepredStatement의 파라미터로 사용, String 값으로 사용.
order by 같은 경우에 사용하기 위해서는 order by ${orderParam} 처럼 사용해야 한다.
이 방법을 사용하는 경우 MyBatis가 자체적으로 쿼리의 적합성여부를 판단할 수 없기 때문에 사용자의 입력값을 그대로 사용하는 것보다는 개발자가 미리 정해놓은 값 등으로 변경하도록 해서 정확한 값이 들어올 수 있도록 해야 한다.
sqlMap쪽에서 사용하던 typeAlias가 sqlMap이 바뀐 mapper 에서 사용되지 않고 Configration 파일에서 정의하도록 변경되었다.
<typeAliases> <typeAlias type="vo.UserVO" alias="User"/> </typeAliases>
Configration 파일에 위의 형식처럼 Aliase를 정의하면 전체 mapper 에서 사용할 수 있다.
<if test=“userID != null”> 형태로 간단하게 사용할 수 있다.
<dynamic> 형태로 해서 where 조건절이나 and , or 를 동적으로 만들던것이 <where>나 update에서 사용할 수 있는 <set> 등으로 변경되었다.
<select id="getUserList" resultType="User> SELECT * FROM TR_USER <where> <if test="isAdmin != null"> authLevel = '1' </if> </where> </select>
1) trim은 쿼리를 동적생성할때에 쿼리를 연결하기 위해서 컴마(,)를 사용한경우 마지막항목이 조건을 만족하지 못해서 생성된 쿼리 끝에 컴마가 붙어있다던가 하는 경우에 잘라낼 수 있다.
2) foreach는 반복적인 항목을 동적으로 넣을때 사용할 수 있다. ( ex. where 조건절에서 in 을 사용하는 경우)