본문 바로가기

전지적라온시점

MyBatis 기초 가이드 – 설정부터 첫 쿼리까지 완벽 정리 본문

Development/Mybatis

MyBatis 기초 가이드 – 설정부터 첫 쿼리까지 완벽 정리

최라온 2025. 5. 20. 11:34
728x90
반응형
SMALL

MyBatis 기초 가이드 – 설정부터 첫 쿼리까지 완벽 정리

MyBatis는 SQL을 명확하게 제어할 수 있는 Java 기반의 데이터베이스 매퍼 프레임워크입니다. 복잡한 쿼리 작성이 필요한 실무 환경에서 널리 사용되며, JPA보다 더 많은 자유도와 유연성을 제공합니다. 이 글에서는 MyBatis의 설정 구조부터 첫 Select/Insert 쿼리 작성까지 기초적인 흐름을 정리합니다.

1. MyBatis란?

MyBatis는 Java 객체와 SQL 간의 매핑을 쉽게 해주는 프레임워크입니다. 기존 JDBC의 반복적인 코드 문제를 해결하면서도 SQL 작성의 자유로움을 유지합니다.

MyBatis 특징

  • SQL 직접 제어 가능 → 복잡한 쿼리에 적합
  • XML 또는 어노테이션 기반 매핑 지원
  • SQL과 Java 객체 간 명시적 바인딩
  • Spring과 쉽게 통합 가능

2. 기본 디렉토리 구조 (Spring Boot 기준)

src/
 ├─ main/
 │   ├─ java/com/example/
 │   │   ├─ mapper/UserMapper.java
 │   │   └─ model/User.java
 │   └─ resources/
 │       ├─ mapper/UserMapper.xml
 │       └─ application.yml
  

3. 의존성 설정 (Gradle)

dependencies {
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'
    runtimeOnly 'mysql:mysql-connector-java'
}

4. application.yml 설정

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb
    username: root
    password: 1234
  mybatis:
    mapper-locations: classpath:mapper/*.xml
    type-aliases-package: com.example.model

5. 도메인 객체 (User.java)

public class User {
    private Long id;
    private String name;
    private int age;
    // Getter, Setter
}

6. Mapper 인터페이스 (UserMapper.java)

@Mapper
public interface UserMapper {
    User selectUser(Long id);
    void insertUser(User user);
}

7. Mapper XML (UserMapper.xml)

<?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.mapper.UserMapper">

  <select id="selectUser" parameterType="long" resultType="User">
    SELECT * FROM users WHERE id = #{id}
  </select>

  <insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO users(name, age) VALUES(#{name}, #{age})
  </insert>

</mapper>

8. 첫 쿼리 실행 예제 (Service or Controller)

@RestController
@RequiredArgsConstructor
public class UserController {
    private final UserMapper userMapper;

    @PostMapping("/users")
    public String saveUser() {
        User user = new User();
        user.setName("홍길동");
        user.setAge(30);
        userMapper.insertUser(user);
        return "User Saved: ID = " + user.getId();
    }
}

9. 자주 발생하는 오류

  • Mapper XML 경로 오류 → mapper-locations 확인
  • 타입 매핑 오류 → resultType 오타
  • Mapper interface와 XML의 namespace 불일치
  • keyProperty 설정 누락 → insert 후 ID 조회 안됨

10. 결론

MyBatis는 SQL을 명확히 제어하고 싶은 개발자에게 매우 유용한 프레임워크입니다. 이 글에서 다룬 구조를 바탕으로 설정과 쿼리를 구성하면 빠르게 실무에 적용할 수 있습니다. 이후에는 동적 SQL, resultMap, 페이징 처리 등으로 확장하며 숙련도를 높이세요.

728x90
반응형
LIST