기본적으로 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
우선 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로 파싱된다고 한다!
'Study > Spring boot' 카테고리의 다른 글
[Spring boot] WebClient 사용해보기 (1) | 2022.04.05 |
---|---|
[Spring boot] file upload 한글 깨짐 (0) | 2022.03.23 |
[Spring boot] 의존성 주입(DI) 복습 (0) | 2022.02.23 |
[Spring boot] @RequestParam과 @PathVariable (0) | 2022.01.28 |
[Spring boot] Lombok(롬복) (0) | 2022.01.26 |