Kim VamPa

[MyBatis] <if> 사용법 본문

공부/데이터베이스

[MyBatis] <if> 사용법

Kim VamPa 2021. 3. 4. 10:12
728x90
반응형

목표

 

MyBatis에서 사용하는 <if> 사용법

 <if>를 왜 사용하고 어떻게 사용하는지를 알아봅니다.

 

 

순서

1. <if> 이해

2. 예제

 

 

1. <if>

 조건식이 참인 경우 쿼리문을 실행합니다.  전달받은 파라미터 값에 따라 쿼리를 동적으로 변할 수 있게 해 줍니다. 주로 where의 일부로 포함되어서 사용합니다.

 

 <if> 태그의 test 속성의 속성 값으로 논리 연산자(>, >=, <, <=, ==,!=)를 사용한 조건식을 삽입합니다. <if> 태그 안에는 조건에 조건식이 true일 경우 실행되어야 할 쿼리를 작성합니다. 가장 흔히 사용되는 조건식은 파라미터의 값이 null인지 체크하는 식입니다.

 

<select id="findBoardList" resultType="boardList">

	select * from tbl_board
    where title = '%'||#{title}||'%'
    <if test="content != null">
    	OR content = '%'||#{content}||'%'
    </if>

</select>

 

 위의 코드는 content파라미터 값이 존재할 경우 <if> 태그 내부의 쿼리문이 실행이 됩니다.

 

  조건식에는 관계연산자(AND, OR,!) 또한 사용할 수 있습니다. 아래는 Mybatis 공식 홈페이지의 예제입니다.

 

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

 

 

 

2. 예제

2.1 null

 

 

<if test="prameter1 != null"></if>

<if test="parameter1 == null"></if>

 

2.2 숫자비교

 

<if test="prameter1 == 5"></if>

<if test="parameter1 > 5 "></if>

<if test="parameter1 >= 5 "></if>

<if test="parameter1 < 5 "></if>

<if test="parameter1 <= 5 "></if>

<if test="parameter1 != 5 "></if>

 

2.3 문자 비교

 

 문자 비교를 위해서 아래와 같이 작성한 경우 java.lang.NumberFormatException이 발생합니다.

 

<if test="parameter1 == 'a' "></if>

 

 OGNL(Object Graph Navigation Language) 인터프리터에서 'y'를 char 형으로 인식을 합니다. java에서는 char형 데이터를 유니코드 값, 즉 숫자로 처리하기 때문에 숫자 형식으로 비교를 시도하여서 예외(Exception)가 발생합니다. 

 따라서 아래와 같은 형식으로 비교를 해주어야 합니다. 

 

<if test="parameter1 == 'y'.toString()">

<if test='parameter1.equals("y")'>

<if test='parameter1 == "y"'>

 

2.4 문자열 비교

 

 '문자 비교'도 마찬가지이지만 equals()는 대문자, 소문자를 구분해서 비교하는 연산자이고, equalsIgnoreCase()를 사용한 경우 대소문자를 구분하지 않고 비교하는 연산자입니다.

 

<if test='parameter1.equals("string")'>

<if test='parameter1.equalsIgnoreCase("string")'>

<if test="parameter1.equals('string')">

<if test='parameter1 == "string"'>

<if test="parameter1 == 'string'">

 

2.5 and, or 

 

<if test="parameter1 != null and parameter2 != null">

<if test="parameter1 != null or parameter2 != null">

<if test='parameter1 == "string" and parameter2 == "string"'>

<if test='parameter1 != null and parameter2.equals("string")'>

<if test="parameter1 != null and parameter2.equals('string')">

 

 

 

REFERENCE

 

 

DATE

  • 2020.03.04
728x90
반응형
Comments