본문 바로가기
spring

[springboot] MyBatis resultType이 Map일경우 key를 소문자로 만들기

by moonsiri 2020. 10. 14.
728x90
반응형

보통 MyBatis에서 resultType으로 목록이나 데이터를 조회할 경우 VO(Value Object)를 많이 사용합니다.

그런데 VO 가 아닌 map을 사용할 경우 key 값이 대문자로 들어갑니다. (oracle, h2 등)

VO는 보통 camelCase 이거나 언더바를 포함한 소문자 명명규칙을 사용합니다.

 

Map의 Key를 VO처럼 소문자 명명규칙을 사용하게 설정해봅시다.

 

사실 전자정부프레임워크를 사용하면 EgovMap을 사용하여 camelCase로 key를 세팅하도록 되어있습니다.

 

그래서 전자정부프레임워크처럼 Map을 상속받는 클래스를 생성하고 put 함수를 가로채 key를 lowerCase로 치환해주는 새로운 Map 객체를 만들어보겠습니다. 전자정부 프레임워크가 사용하고 있는 방법이기 때문에 어느 정도 검증된 방법이라 생각합니다.

 

com.demo.util.ParamMap.java

public class ParamMap extends ListOrderedMap {
    // ...

    public Object put(Object key, Object value) {
        // StringUtils.lowerCase 로 key값을 소문자로 변경 (USER_NAME => user_name)
        // JdbcUtils.convertUnderscoreNameToPropertyName 로 key값을 camelCase로 변경 (user_name => userName)
        return super.put(JdbcUtils.convertUnderscoreNameToPropertyName(StringUtils.lowerCase((String) key)), value);
    }
}

 

application.yml mapper.xml의 위치와 paramMap패키지 경로를 설정해줍니다.

mybatis:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.demo.util

 

mapper/*.xml에서 다음과 같이 사용하면 됩니다.

<select id="selectBoardList" parameterType="ParamMap" resultType="ParamMap">
    ...
</select>

 

 

Mapper.java

@Mapper
@Repository
public interface BoardMapper {
    List<Map<String, Object>> selectBoardList(Map<String, Object> paramsMap);
}

 

728x90
반응형

댓글