MyBatis는 resultType에 맞게 리턴타입을 반환합니다.
예를들어 SONG 테이블의 모든 컬럼은 SongVO의 'song_title, song_key ...' 속성값으로 처리됩니다.
좀 더 엄밀하게 말하면 MyBatis는 위의 쿼리 결과에서 song_title 이라는 컬럼이 존재하면 인스턴스의 setSong_title(); 를 호출하게 됩니다. MyBatis의 모든 파라미터와 리턴 타입의 처리는 get 파라미터명(), set 컬럼명()의 규칙으로 호출됩니다.
에러원인
해당 쿼리에 대한 데이터 값은 컬럼명을 참조하여 setSong_key(), setSong_title() .. 이런식으로 세팅이 됩니다.
<select id="getSongInfo" resultType="com.exe.domain.SongVO" parameterType="String">
SELECT
SONG_KEY, SONG_TITLE, REL_DATE, YOUTUBE_LINK, ALBUM_KEY
FROM
SONG
WHERE
SONG_KEY = #{song_key, jdbcType=VARCHAR}
</select>
그런데 SongVO의 객체가 다음과 같이 정의돼있었습니다.
@Data
public class Song {
private String songKey;
private String songTitle;
private String relDate;
private String youtubeLink;
private String albumKey;
}
Lombok에 의해 setSongKey(), setSongTitle() 이렇게 생성됐겠죠? 그래서 쿼리결과값에 대한 데이터를 못받아온겁니다.
에러해결
방법1) 컬럼명과 동일하게 변수선언을 해준다.
@Data
public class SongVO {
private String song_key;
private String song_title;
private String rel_Date;
private String youtube_link;
private String album_key;
}
방법2) Mybatis 옵션을 통하여 CamelCase로 자동 변환 해준다.
mybatis-config.xml 에 이와같이 추가해주면 camelCase로 자동으로 변환이 될 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"[http://mybatis.org/dtd/mybatis-3-config.dtd](http://mybatis.org/dtd/mybatis-3-config.dtd)">
<configuration>
<settings>
<!-- 자동으로 카멜케이스 규칙으로 변환 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
'Spring 3.0 - 4.3' 카테고리의 다른 글
메이븐 기초 (1) Maven이란 / Maven 설치법 / jar파일 생성하기 (0) | 2020.08.09 |
---|---|
[에러] 톰캣 404에러 - Controller 부분 확인하기 (0) | 2020.06.25 |
[Spring] Spring의 의존성 주입이란 / 어노테이션이란 (0) | 2020.06.21 |
1탄 - 스프링을 이용해 Rest API 만들어보기 (1) | 2020.06.19 |
[에러] MyBatis - selectOne으로 가지고 올 때 result가 null인 경우 처리 방법 (0) | 2020.06.09 |