Study/Spring boot

[Spring boot] Snake_case to camelCase

Anna-Jin 2022. 3. 22. 20:02
반응형

기본적으로 JAVA는 camelCase를 사용하고 MySQL에서는 Snake_case를 권장한다고 한다.

 

Spring boot 공부를 하면서 camelCase와 Snake_case 중 어떤걸 사용해야할 지 몰라서 왔다갔다 제멋대로 사용하고 있었는데 두 표현방식을 적절한 위치에 적절하게 사용해야한다고 한다!!! 로마에선 로마법을 따라야하듯이 말이다.

 

그럼 둘 사이를 어떻게 왔다갔다 하느냐.. 역시나 방법은 존재한다! 

오늘은 Snake_case to camelCase로 형식 변환을 하는 방법을 알아보자.

 


 

클라이언트 <-> 서버 (Jackson)

클라이언트에서는 snake_case를, 서버에서는 camelCase를 사용하므로 클라이언트 측에서 파라미터를 받아올 때 이걸 camelCase로 바꿔주어야 Dto가 해당 파라미터를 받아서 DB에게 넘겨줄 수 있다. 이 경우에 사용할 수 있는 어노테이션 두가지가 있다!

@JsonProperty

@JsonProperty 어노테이션은 각 필드마다 직접 네이밍을 해줄 수 있게 만들어주는 어노테이션이다.

다음과 같이 사용할 수 있다.

@Data
public class UserDto {
    private int id;
    private String name;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonProperty("birth_day")
    private LocalDate birthDay;
}

 

이렇게 받아올 파라미터가 많지 않을 때는 하나하나 파싱할 수 있지만 그 수가 많아지는 경우에는 일일히 하기란 여간 귀찮고 힘든게 아니다.

이럴때 사용하는 어노테이션이 @JsonNaming이다.

 

@JsonNaming

@Data
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class UserDto {
    private int id;
    private String name;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthDay;
}

위와같이 @JsonNaming 어노테이션을 붙여주면 파싱이 가능하다!

 

 


서버 <-> DB

위에서 본 어노테이션을 적용했으나 여전히 db에서 가져온 값이 null로 나타나기만 할 뿐이어서 계속 삽질하던 중..

DB의 컬럼명도 snake_case로 되어있으니 얘도 파싱을 해줘야한다는 점을 깨달았다!

 

https://ayoteralab.tistory.com/entry/Spring-Boot-10-mybatis-camelCase-%EC%A0%81%EC%9A%A9

 

[Spring Boot] 10. mybatis camelCase 적용

안녕하세요. 예전 글에서 DB로 부터 Data를 가져와서 브라우저화면에서 표출하는 test를 했었습니다. 2019/11/10 - [SpringBoot] - [Spring Boot] 05. MyBatis Basic Full Test [Spring Boot] 05. MyBatis Basic F..

ayoteralab.tistory.com

 

우선 src/main/resources에 mybatis-config.xml을 추가해준다

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>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
		<setting name="callSettersOnNulls" value="true"/>
		<setting name="jdbcTypeForNull" value="NULL"/>
	</settings>
</configuration>

 

그리고 해당 파일의 위치를 알려주기 위해 mapper 경로를 설정했던 DatabaseConfig.java에서 sessionFactory에 해당 경로를 추가해준다.

 

DatabaseConfig.java
public class DatabaseConfig {

    @Autowired
    private ApplicationContext applicationContext;

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml"));
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mappers/*Mapper.xml"));

        return sqlSessionFactoryBean.getObject();
    }
}

 

이렇게 설정파일을 추가하면 DB의 snake_case를 camelCase로 변환할 수 있다.

 

 

 

더 간단하게는 application.yml에 설정코드를 추가하는 방법이 있다고 하는데 왜 내가 하면 안되는걸까..ㅠ

나중을 위해 방법은 추가해놓겠다

 

application.yml
mybatis:
	configuration:
		map-underscore-to-camel-case: true

 

위의 코드를 추가해주면 간단하게 camelCase로 파싱된다고 한다!

반응형