ibatis vs mybatis 조건문 + mybatis 공백조건 비교시 안될경우 및 두개이상 조건주기
ibatis(mybatis) 쿼리 xml을 작성할때 조건문이 필요할 경우가 생긴다.
ibatis(mybatis)의 장점은 조건을 주면서 동적쿼리를 생성할수 있다는 장점이 있다.
즉, 프로시저를 사용하지 않아도 어느정도의 출력이 가능하다는 이야기임.
다음과 같은 테이블이 있다고 가정하자
- board
id |
int |
title |
varchar |
content |
text |
create_id |
varchar |
update_id |
varchar |
위의 기준으로 생성된 테이블에서 예를들기 위해 몇가지 조건에 따라 비교를 하도록 하겠음
1. update_id null/not null 체크 조건문
- ibatis(isNull / isNotNull)
<isNull property="update_id"> 조건절 </isNull> <isNotNull property="update_id"> 조건절 </isNotNull>
-mybatis(if / choose when otherwise)
<if test="update_id == null"> 조건절 </if> <if test="update_id != null"> 조건절 </if>또는
<choose> <when test="update_id == null"> null 조건절 </when> <otherwise> not null 조건절 </otherwise> </choose>
2. update_id 공백유무 체크 조건문
- ibatis(isEmpty / isNotEmpty)
<isEmpty property="update_id"> 조건절 </isEmpty> <isNotEmpty property="update_id"> 조건절 </isNotEmpty>
-mybatis(if / choose when otherwise)
<if test="update_id == ''"> 조건절 </if> <if test="update_id != ''"> 조건절 </if>또는
<choose> <when test="update_id == ''"> 공백일경우 조건절 </when> <otherwise> 공백 아닐경우 조건절 </otherwise> </choose>
mybatis의 공백조건 체크를 위와같이 조건을 주었는데도 체크가 되지 않을 경우에
하단 내용 처럼
쌍따옴표("") -> 홑따옴표('') and 홑따옴표('') -> 쌍따옴표("")로 변경을 해주자
문자열쪽에서 문제가 발생하는거 같음
3. id(숫자) 비교체크 조건문
- ibatis(isGreaterThan/isGreaterEqual/isLessThan/isLessEqual)
<isGreaterThan property="id" compareValue="3"> 3보다 크다 </isGreaterThan> <isGreaterEqual property="id" compareValue="3"> 3보다 크거나 같다 </isGreaterEqual> <isLessThan property="id" compareValue="3"> 3보다 작다 </isLessThan> <isLessEqual property="id" compareValue="3"> 3보다 작거나 같다 </isLessEqual>
- mybatis(if/choose when otherwise)
<if test='id > 3'> 3보다 크다 </if> <if test='id >= 3'> 3보다 크거나 같다 </if> <if test='id < 3'> 3보다 작다 </if> <if test='id <= 3'> 3보다 작거나 같다 </if>또는
<choose> <when test='id > 3'> 3보다 크다 </when> <when test='id == 3'> 3이다 </when> <when test='id < 3'> 3보다 작다 </when> </choose>
4. 검색 조건 선택후 검색버튼 클릭했을경우라고 가정
(문자열) 비교체크 조건문
- ibatis(isEqual / isNotEqual + compareValue)
<isEqual property="search_key" compareValue="title"> 조건절 </isEqual> <isNotEqual property="search_key" compareValue="content"> 조건절 </isNotEqual>
- mybatis는 공백조건의 경우와 동일하므로 생략
위와같이 비교를 들 수 있을 것이다.
본인의 생각으로
ibatis는 일일이 태그를 조건문 갯수에 따라 추가를 해줘야 하는 번거로움이 있는 반면,
mybatis는 JSTL처럼 일반적인 방식으로 사용을 해줄수 있어 라인수도 줄고 동적쿼리 작성하는데 코드작성이 좀더 수월한거 같다.
※ 만약 하나 이상의 조건을 mybatis에서 줄경우
&& = and
|| = or
로 하여서 여러개의 property로 비교가 가능하다.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!