mybatis 조회결과에 camelCase와 롬복을 적용해봅시다.
코드: https://github.com/skyepodium/hello-mybatis
mybatis 조회 결과에 camelCase를 적용해서, lombok으로 데이터 쉽게 뽑아냅시다.
application.properties 또는 yml
에 작성하는 방법은 적용되지 않아서, 외부에 mybatis-config.xml
을 생성합니다.
mapUnderscoreToCamelCase
을 true
로 설정합니다.
경로: /resources/mybatis/mybatis-config.xml
<?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">
<configuration>
<settings>
<!-- DB 조회결과 snake_case -> camelCase 변환 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
다음과 같이 파일 경로를 작성해줍니다.
mybatis:
config-location: classpath:/mybatis/mybatis-config.xml
현재 프로젝트에서 mybatis를 사용하기 위해 어디선가 config를 해주었을 텐데 mybatisConfigPath
을 sqlSessionFactoryBean
에 잘 넣어줍니다.
package com.example.hellomybatis.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
@MapperScan(value = "com.example.hellomybatis", sqlSessionFactoryRef = "SqlSessionFactory")
public class DbConfig {
@Value("${spring.datasource.mapper-locations}")
String mPath;
// mybatis 설정 파일을 따로 작성해서 임포트할 예정 - snake_case -> camelCase 를 위함
@Value("${mybatis.config-location}")
String mybatisConfigPath;
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource DataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "SqlSessionFactory")
public SqlSessionFactory SqlSessionFactory(@Qualifier("dataSource") DataSource DataSource, ApplicationContext applicationContext) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(DataSource);
sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources(mPath));
sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource(mybatisConfigPath));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "SessionTemplate")
public SqlSessionTemplate SqlSessionTemplate(@Qualifier("SqlSessionFactory") SqlSessionFactory firstSqlSessionFactory) {
return new SqlSessionTemplate(firstSqlSessionFactory);
}
}
camelCase 이고, lombok이 적용되어 쿼리 조회시 getter, setter로 데이터를 자동으로 넣어줍니다.
package com.example.hellomybatis.domain;
import lombok.Data;
@Data
public class User {
private long id;
private String loginId;
}
쿼리에서 조회된 snake_case 칼럼이 camelCase로 변환되어 JavaObject에 바로 들어갑니다.
예시) login_id -> loginId
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.hellomybatis.mapper.UserMapper">
<select id="getUserList" resultType="com.example.hellomybatis.domain.User">
SELECT
id
, login_id
FROM
user
ORDER by
id asc
</select>
</mapper>
깃허브에 전체코드 있습니다.
https://github.com/skyepodium/hello-mybatis