MyBatis/iBatis를 사용하다보면 insert/update시 null을 입력해야 할 때가 있다.
일반적으로 paramter를 넘겨서 insert/update를 실행할 때 입력값에 null 이 들어가 있으면 오류가 발생한다.
Mybatis에선 파라메터의 값이 null일 경우 입력이 불가능하다.
mapper에서 if를 사용해 필터링 할 수 있지만 소스가 길어진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<insert id="insQuery" parameterType="hashmap">
INSERT INTO
TB_test
(
idx
<if test="memo != null">
, memo
</if>
)
VALUES
(
#{idx}
<if test="memo != null">
, #{memo}
</if>
)
</insert>
|
cs |
대체 방법으로 파라메터에 jdbcType을 지정해주면 null이 들어가더라도 처리가 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
|
<insert id="insQuery" parameterType="hashmap">
INSERT INTO TB_test (idx, memo) VALUES (#{idx, jdbcType=INTEGER}, #{memo, jdbcType=VARCHAR})
</insert>
<insert id="upQuery" parameterType="hashmap">
UPDATE
TB_test
SET
memo = #{memo, jdbcType=VARCHAR}
WHERE
idx = #{idx, jdbcType=INTEGER}
</insert>
|
cs |
jdbcType으로 지정 가능한 타입은 다음과 같다.
BIT | TINYINT | SMALLINT | INTEGER | BIGINT |
FLOAT | REAL | DOUBLE | NUMERIC | DECIMAL |
CHAR | VARCHAR | LONGVARCHAR | DATE | TIME |
TIMESTAMP | BINARY | VARBINARY | LONGVARBINARY | NULL |
OTHER | BLOB | CLOB | BOOLEAN | CURSOR |
UNDEFINED | NVARCHAR | NCHAR | NCLOB |