SpringBoot 를 배워보자

MyBatis의 mapUnderscoreToCamelCase 설정을 false로 변경하고 수동 매핑하는 방법

_Blue_Sky_ 2025. 1. 5. 00:08
728x90
728x90

 

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

728x90

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

mapUnderscoreToCamelCasefalse로 설정되었기 때문에, 데이터베이스 컬럼명과 자바 객체의 필드명이 정확히 일치해야 합니다. 따라서 별도의 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);
    }
}

728x90

8. 실행 결과

테스트를 실행하면 다음과 같은 결과가 출력됩니다.

User{user_id=1, user_name='John Doe', user_email='john.doe@example.com'}

9. 결론

mapUnderscoreToCamelCasefalse로 설정하면 MyBatis는 데이터베이스 컬럼명을 카멜 케이스로 변환하지 않습니다. 따라서 데이터베이스 컬럼명과 자바 객체의 필드명이 정확히 일치해야 합니다. 이 예제에서는 user_id, user_name, user_email과 같이 데이터베이스 컬럼명과 동일한 필드명을 사용하여 매핑했습니다.

결론적으로, mapUnderscoreToCamelCase 설정을 false로 변경하고 수동 매핑하는 방법은 데이터베이스 컬럼명과 자바 객체의 프로퍼티 이름 간의 일관성을 유지하고, 예상치 못한 매핑 오류를 방지하기 위한 효과적인 방법입니다. 하지만, 프로젝트의 특성과 개발 환경에 따라 적절한 방법을 선택해야 합니다.

추가로 궁금한 점이 있다면 언제든지 질문해 주세요! 😊

728x90
728x90