mybatis - camelCase 적용

skyepodium·2022년 6월 3일
0

mybatis 조회결과에 camelCase와 롬복을 적용해봅시다.
코드: https://github.com/skyepodium/hello-mybatis

1. 개요

mybatis 조회 결과에 camelCase를 적용해서, lombok으로 데이터 쉽게 뽑아냅시다.

2. mybatis-config.xml

application.properties 또는 yml에 작성하는 방법은 적용되지 않아서, 외부에 mybatis-config.xml 을 생성합니다.

mapUnderscoreToCamelCasetrue로 설정합니다.

경로: /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>

3. application.yml

다음과 같이 파일 경로를 작성해줍니다.

mybatis:
  config-location: classpath:/mybatis/mybatis-config.xml

4. config

현재 프로젝트에서 mybatis를 사용하기 위해 어디선가 config를 해주었을 텐데 mybatisConfigPathsqlSessionFactoryBean에 잘 넣어줍니다.

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);
    }
}

5. domain

camelCase 이고, lombok이 적용되어 쿼리 조회시 getter, setter로 데이터를 자동으로 넣어줍니다.

package com.example.hellomybatis.domain;

import lombok.Data;

@Data
public class User {
    private long id;
    private String loginId;
}

6. 쿼리

쿼리에서 조회된 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>

7. 전체 코드

깃허브에 전체코드 있습니다.
https://github.com/skyepodium/hello-mybatis

profile
callmeskye

0개의 댓글