반응형
아래와 같은 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 인 경우에는
- MyBatis 설정 파일에서 설정하거나,
- SQL mapper 파일에서 옵션값으로 설정하거나,
- 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 = "";
}
반응형
'Database > MySQL' 카테고리의 다른 글
[MySQL] DataTime <> UnixTime 표기 변환 (0) | 2020.07.22 |
---|---|
[MySQL] 데이터 CRUD 작업 (0) | 2019.11.16 |
[MySQL] 테스트 데이터베이스 생성 및 사용 (0) | 2019.11.16 |