본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/spring

[spring] MyBatis insert, update NULL

by 미노드 2021. 9. 30.

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