티스토리 뷰

Spring

[mybatis] if 조건문 사용하기

wldnjd2 2022. 9. 14. 17:03
예시

 

SQL에서도 조건문을 사용해야할때가 필요하다...!

 

<update id="insertTest" parameterType="TestVO">		
	INSERT INTO
        	gms_minwon_tb 
   	(
		cvlcpt_unq_no
		,cvlcpt_cn
		,actn_ymd
		,cvlcpt_typ
     	)
       VALUES
       (
		#{cvlcpt_unq_no}
		,#{cvlcpt_cn,              jdbcType=VARCHAR}
         	,TO_DATE(#{actn_ymd, jdbcType=VARCHAR}, 'YYYY-MM-DD')
		,#{cvlcpt_typ,              jdbcType=VARCHAR}
	)
</update>

 

위의 간단한 예제를 예로들면

 

actn_ymd에 null값이 들어갔을때 (컬럼에 20220914과 같은 날짜 데이터가 입력이 되지 않았을때)

데이터가 00010101bc로 db에 입력되는 현상이 일어났다.

 

이런현상이 일어나는 이유가

,TO_DATE(#{actn_ymd, jdbcType=VARCHAR}, 'YYYY-MM-DD') 가

null 값을 날짜로 변형시키게 되면서 나타나게 된 것이다.

 

 

 

해결방법

 

1. 데이터가 null이면 null값을 그대로(변형없이 입력)

2. null이 아니면 날짜를 그대로 insert

 

<update id="insertTest" parameterType="TestVO">		
	INSERT INTO
        	gms_minwon_tb 
   	(
		cvlcpt_unq_no
		,cvlcpt_cn
       		<if test="actn_ymd != null and !actn_ymd.equals('')">
		,actn_ymd
		</if>
     		,cvlcpt_typ
     	)
       VALUES
       (
		#{cvlcpt_unq_no}
		,#{cvlcpt_cn,              jdbcType=VARCHAR}
         	<if test="actn_ymd != null and !actn_ymd.equals('')">
          	,TO_DATE(#{actn_ymd, jdbcType=VARCHAR}, 'YYYY-MM-DD')
          	</if>
		,#{cvlcpt_typ,              jdbcType=VARCHAR}
	)
</update>

 

조건문을 통해서 해결했다

 

<if test="actn_ymd != null and !actn_ymd.equals('')">

actn_ymd가 null이 아니면 TO_DATE(#{actn_ymd, jdbcType=VARCHAR}, 'YYYY-MM-DD') 를 실행!

 

아주 간단하다.

하지만 이것도 헤맸는데, 그 이유는 values에만 조건문을 걸어주면 된다고 생각했기 때문이다.

insert into에도 if 조건문을 걸어줘야하는 것을 몰랐다 ㅜㅜ

 

 

insert into랑 value 둘다 if를 해주는 이유는
T or F 의 조건에서, 조건에 해당하지 않으면 value 값이 비어버리기 때문에  insert에 들어갈 값이 밀려서 에러가 나기 때문이다.


댓글