mapUnderscoreToCamelCase
설정을 false
로 변경한 예제를 만들어보겠습니다. 이 예제에서는 MyBatis가 데이터베이스 컬럼명을 카멜 케이스로 자동 변환하지 않도록 설정하고, 수동으로 매핑하는 방법을 보여드리겠습니다.
1. 환경 설정
A. mybatis-config.xml
설정
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="false" />
</settings>
</configuration>
B. Spring Boot에서 application.properties
설정
mybatis.configuration.map-underscore-to-camel-case=false
2. 데이터베이스 테이블 및 샘플 데이터
예제를 위해 다음과 같은 users
테이블을 가정합니다.
CREATE TABLE users (
user_id INT PRIMARY KEY,
user_name VARCHAR(100),
user_email VARCHAR(100)
);
INSERT INTO users (user_id, user_name, user_email) VALUES (1, 'John Doe', 'john.doe@example.com');
3. 자바 객체 (DTO)
User
클래스를 정의합니다. 이때, 필드명은 데이터베이스 컬럼명과 동일하게 작성합니다.
public class User {
private int user_id; // 데이터베이스 컬럼명과 동일
private String user_name; // 데이터베이스 컬럼명과 동일
private String user_email; // 데이터베이스 컬럼명과 동일
// Getter와 Setter
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_email() {
return user_email;
}
public void setUser_email(String user_email) {
this.user_email = user_email;
}
@Override
public String toString() {
return "User{" +
"user_id=" + user_id +
", user_name='" + user_name + '\'' +
", user_email='" + user_email + '\'' +
'}';
}
}
4. MyBatis Mapper XML
mapUnderscoreToCamelCase
가 false
로 설정되었기 때문에, 데이터베이스 컬럼명과 자바 객체의 필드명이 정확히 일치해야 합니다. 따라서 별도의 ResultMap
을 정의하지 않고도 자동 매핑이 가능합니다.
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUserById" resultType="User">
SELECT user_id, user_name, user_email
FROM users
WHERE user_id = #{userId}
</select>
</mapper>
5. Mapper 인터페이스
MyBatis Mapper 인터페이스를 정의합니다.
package com.example.mapper;
import com.example.dto.User;
public interface UserMapper {
User selectUserById(int userId);
}
6. 서비스 계층
서비스 클래스에서 Mapper를 호출합니다.
package com.example.service;
import com.example.dto.User;
import com.example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(int userId) {
return userMapper.selectUserById(userId);
}
}
7. 테스트 코드
작성한 코드를 테스트해보겠습니다.
import com.example.dto.User;
import com.example.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void testGetUserById() {
User user = userService.getUserById(1);
System.out.println(user);
}
}
8. 실행 결과
테스트를 실행하면 다음과 같은 결과가 출력됩니다.
User{user_id=1, user_name='John Doe', user_email='john.doe@example.com'}
9. 결론
mapUnderscoreToCamelCase
를 false
로 설정하면 MyBatis는 데이터베이스 컬럼명을 카멜 케이스로 변환하지 않습니다. 따라서 데이터베이스 컬럼명과 자바 객체의 필드명이 정확히 일치해야 합니다. 이 예제에서는 user_id
, user_name
, user_email
과 같이 데이터베이스 컬럼명과 동일한 필드명을 사용하여 매핑했습니다.
결론적으로, mapUnderscoreToCamelCase 설정을 false로 변경하고 수동 매핑하는 방법은 데이터베이스 컬럼명과 자바 객체의 프로퍼티 이름 간의 일관성을 유지하고, 예상치 못한 매핑 오류를 방지하기 위한 효과적인 방법입니다. 하지만, 프로젝트의 특성과 개발 환경에 따라 적절한 방법을 선택해야 합니다.
추가로 궁금한 점이 있다면 언제든지 질문해 주세요! 😊
'SpringBoot 를 배워보자' 카테고리의 다른 글
스프링과 MyBatis를 활용한 데이터베이스 프로시저 개발 가이드: 효율적인 설계와 유지보수를 위한 종합적인 안내 (2) | 2024.12.28 |
---|---|
두 테이블에 공통된 대조 필드가 있을 때, 사용자가 원하는 필드들만 출력되도록 동적 쿼리를 작성 (0) | 2024.12.02 |
쿼리의 페이징을 옵션에 따라 포함시키거나 제외하는 동적 SQL (0) | 2024.12.02 |
오라클 환경에서 MyBatis를 사용하여 SQL을 기능적으로 쪼개어 동적으로 조합하는 예 (0) | 2024.12.02 |
Spring Boot 프로젝트에 Swagger UI 적용하여 API 문서 자동 생성하기: 상세 가이드 (0) | 2024.12.02 |