본문 바로가기

Database/MySQL

[MySQL][MyBatis] Query null 처리 방법에 대한 고찰

반응형

 

아래와 같은 Query를 처리하는 과정에 NULL체크를 해야한다고 했을때, 처리할 수 있는 방법이 세 가지가 있다.

 

예시 )

INSERT INTO message_info
(
	message_id,
	message_title,
	message_body,
	reg_dt
)
VALUES
(
	#{messageId},
	#{messageTitle},
	#{messageBody},
	now()
)

 

위 예시에서 messageTitle 은 필수값이 아니여서 null 인 경우로 파라미터가 전달될 수 있는 것이었다.

그러면, MyBatis에서 쿼리에 맵핑되는 파라미터에 null 값이 있어 ERROR를 발생한다.

 

이를 위해 null 인 경우에는 

  1. MyBatis 설정 파일에서 설정하거나,
  2. SQL mapper 파일에서 옵션값으로 설정하거나,
  3. Java 파일에서 null인 경우, 값을 설정 후 전달

필자는 SQL은 가능하면 빠르게 처리하는게 좋다고 생각하여, 

3번으로 Java 파일단에서 체크하고 SQL문에 전달하는게 좋다고 생각한다. 😊

 

⌗ 해결방법 1


- mybatis 설정 파일

<configuration>
	<settings>
    	...
    	<setting name="jdbcTypeForNull" value="NULL" />
    </settings>
</configuration>

 

⌗ 해결방법 2


NULL 로 셋팅되는 파라미터에 값에 옵션을 붙여준다.

 

- SQL 파일

INSERT INTO message_info
(
	...
	message_title,
	...
)
VALUES
(
	...
	IFNULL(#{messageTitle, jdbcType=VARCHAR}, ''),
	...
)

 

⌗ 해결방안 3


Java 에서 null 인 파라미터인지 확인 후 SQL mapper에 맵핑되도록 설정한다

 

- Java 파일

if (StringUtils.isEmpty(messageTitle)) {
	messageTitle = "";
}

 

반응형

❥ CHATI Github