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로 비교가 가능하다.






슈퍼맨슈퍼맨슈퍼맨



도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!