<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}#
'Certification > Spring(2V0-72.22, SCP)' 카테고리의 다른 글
What is dependency injection and what are the advantages of using it? (0) | 2021.11.03 |
---|---|
Spring MVC - 게시판 페이징 처리 (0) | 2018.10.26 |
Controller @RequestMapping 리턴 타입 (0) | 2018.10.04 |
View에 데이터 전송을 위한 Model 개념 (0) | 2018.10.03 |
Spring MVC - 게시판 만들기CRU(D) - feat.입문편 (0) | 2018.08.21 |