개발하면서 SQL Mapper로 사용하는 iBatis, MyBtis 태그를 간략히 정리해 보았다.
더보기
iBatis와 MyBtis는 Persistence Framework(데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합)로, JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동도 보장해준다. - wikipedia
예시
: member 테이블에서 20살 이상의 성인 회원이며 서울에 사는 회원 50명의 리스트를 불러온다고 가정해보자.
IBATIS
<sqlMap namespace="ibatisDAO">
<!-- paging start -->
<sql id="pageStart">
<![CDATA[
SELECT * FROM(
SELECT
ROWNUM AS RNUM,
ALLDATA.*
FROM(
]]>
</sql>
<!-- paging end -->
<sql id="pageEnd">
<![CDATA[
) ALLDATA
) ALLDATA
WHERE RNUM BETWEEN #startIndex# AND #endIndex#
ORDER BY RNUM ASC
]]>
</sql>
<select id="getMemberList" parameterClass="java.lang.String" resultClass="resultMap">
<include refid="pageStart" />
<![CDATA[
SELECT *
FROM MEMBER
WHERE age >= 20
]]>
<dynamic prepend="WHERE">
<isNotEmpty property ="address1">
address1 = #address1#
</isNotEmpty>
</dynamic>
<include refid="pageEnd" />
</select>
</sqlMap>
MyBatis
<mapper namespace="com.hwang.tree.MybatisMapper">
<!-- paging start -->
<sql id="pageStart">
<![CDATA[
SELECT * FROM(
SELECT
ROWNUM AS RNUM,
ALLDATA.*
FROM(
]]>
</sql>
<!-- paging end -->
<sql id="pageEnd">
<![CDATA[
) ALLDATA
) ALLDATA
WHERE RNUM BETWEEN #startIndex# AND #endIndex#
ORDER BY RNUM ASC
]]>
</sql>
<select id="getMemberList" parameterType="java.lang.String" resultType="resultMap">
<include refid="pageStart" />
<![CDATA[
SELECT *
FROM MEMBER
WHERE age >= 20
]]>
<where>
<if test='address1 != "" '>
address1 = #{address1}
</if>
</where>
<include refid="pageEnd" />
</select>
</mapper>
ibatis를 사용했을 때와 mybatis를 사용했을 때 어떻게 작성하는지 큰 차이점 위주로 간단히 적어보았다.
두 코드를 비교해보면 어떤 것들이 바뀌었는지 알 수 있다.
iBatis | MyBatis |
<sqlMap> | <mapper> |
parameterMap, parameterClass | parameterType |
resultClass | resultType |
#value# | #{value} |
<dynamic prepend="WHERE"> | <where> |
<isNotEmpty> | <if test="조건문"> |
그 외 차이점
iBatis | MyBatis |
com.ibatis.* | org.apache.ibatis.* |
SqlMapConfig | Configration |
sqlMapClient | sqlSession |
rowHandler | resultHandler |
resultHandler | SqlSessionFactory |
$value$ | ${value} |
<isEqual>, <isNotEqual> , <isNull>, <isNotNull>, 등등 | <if test="조건문"> |
여러 조건의 경우 : <choose>, <when>, <otherwise> |
|
<iterate> | <foreach> |
추가적인 차이점들이 더 있으니 필요한 것은 그때그때 찾아보면 좋을 것이다.
tip
- <sql id="sameName"></sql>와 <include refid="sameName"/>를 사용하면 반복되는 쿼리를 바깥에 작성하여 공통으로 사용할 수 있다.
- <![CDATA[ ....코드.... ]]>로 감싸주면 안에 들어간 특수문자를 문자열로 인식해준다. *나 <=같은 비교연산자를 사용하는 경우에 문제를 해결할 수 있다.
- #{} 와 ${}의 차이점 : https://logical-code.tistory.com/25 (너무 잘 설명해놓아서 첨부)
'Framework' 카테고리의 다른 글
[Spring] @PathVariable : url에 변수 추가 (0) | 2021.06.21 |
---|