Certification/Spring(2V0-72.22, SCP)

iBatis Mapper Null 값 치환하기

엘호리스 2018. 10. 25. 14:09

<insert id="inTest" parameterClass="test">
insert into tb_m_erpdata (t_seq, date, t_cnt, t_erpcnt, start, end, regdate, status, chcnt, message)
values (SEQ.nextval, sysdate,
#t_cnt:INTEGER:-999999#,
#t_erpcnt:INTEGER:-999999#,
#start:VARCHAR:NO_ENTRY#,
#end:VARCHAR:NO_ENTRY#,
#regdate:DATE:NO_ENTRY#,
#status:CHAR:NO_ENTRY#,
#chcnt:INTEGER:-999999#,
#message:VARCHAR:NO_ENTRY#)
</insert>


Insert할때 널값이 들어오면 iBatis에서 처리해준다

iBatis 사용시 NULL 에 대한 주의 할 점.

1. 입력값이 빈 경우 처리
<isNotEmpty property="detailStatsKind">
AND STATS_DETAIL_SE = #detailStatsKind#
</isNotEmpty>

2. biding 되는 값 중 NULL 이 있을 경우 기본값(default-value)로 치환 하는 법.
<resultMap>
<result property="valueObject-Field-Name" column="Column-Name" nullValue='0'/>
</resultMap>

와 같이 <result property /> 에 nullValue= 를 이용하여 기본값을 얻어 올 수 있도록 한다.

위와 같이 하지 않을 경우, int-type 을 return 받길 예상 했으나, 적당한 값이 Bind 되지 않아 NULL 이

반환되면 result-Map 의 Class 에 정의한 int-type 변수와 null 이 만나게 되어 Exception 이 발생합니다.

3. parameter 인자가 NULL 이 전달 될 때, 적절한 값으로 type-casting 이 되지 않아, 예외가 발생.

Insert into table(A, b, c, d) values(#a-value#, #b-value#, #c-value#,#d-value#);

와 같이 sql 을 작성하고 , 파라메터 클래스를 이용하여 파라메터를 전달 할 때, 파라메터가 NULL-value 를

전달 하게 되면, casting 에 문제가 생길 수 있습니다.

Interger-Class 또한 NULL-value 를 받아 넣을 수 있기 때문에, 그런지 정확한 type명시기 필요 합니다.

비단 insert 의 경우 뿐 아니라, 파라메터를 전달하는 모든 경우에 해당 될 수 있습니다.

따라서 아래와 같이 수정/정리 할 수 있습니다.

Insert into table(A, b, c, d) values(#a-value#, #b-value#, #c-value#,#d-value#);

==> Insert into table(A, b, c, d) values(#a-value:VARCHAR:NO_ENTRY#
, #b-value:VARCHAR:NO_ENTRY#
,#c-value:VARCHAR:NO_ENTRY#
,#d-value:VARCHAR:NO_ENTRY#);

설명.
#{parameter-Name}:{value-type}:{default-value}#