VS Code에서 Spring Boot 프로젝트 생성 가이드 (4) - Mybatis 설정 방법

luvulmi·2025년 6월 18일
post-thumbnail

🐳 Step 4. Mybatis 설정 방법

Spring Boot에서 MyBatis를 사용하면, XML과 어노테이션 기반 SQL 매핑을 깔끔하게 사용할 수 있습니다.


1. 의존성 추가

  • gradle 일 경우
dependencies {
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
    implementation 'org.mariadb.jdbc:mariadb-java-client'
}

		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>3.0.2</version>
		</dependency>

2. application.yml 설정

spring:
  datasource:
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    url: jdbc:log4jdbc:mariadb://localhost:3306/demo_db
    username: demo_user
    password: demo_password

  mybatis:
    config-location: classpath:mybatis/mybatis-config.xml
    mapper-locations: classpath:mybatis/mapper/**/*.xml
    type-aliases-package: com.example.demo.domain

✅ type-aliases-package 는 도메인 객체 패키지 (DTO, VO 등)
✅ mapper-locations 는 매퍼 XML 경로
✅ config-location 은 MyBatis 전역 설정 파일 (선택)


3. Mapper 인터페이스와 XML 매핑

인터페이스 생성

@Mapper
public interface UserMapper {
    User findById(Long id);
}

매퍼 XML 작성

src/main/resources/mybatis/mapper/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.demo.mapper.UserMapper">

    <select id="findById" resultType="User">
        SELECT id, username, email
        FROM users
        WHERE id = #{id}
    </select>

</mapper>

4. 기본 아키텍쳐 구조 설정

Controller → Service → Mapper → DB
  • Controller: 요청 받고, 응답 돌려줌

  • Service: 비즈니스 로직 처리 담당

  • Mapper: DB와 직접 통신 (SQL 처리)


💡 예제: 사용자(User) 조회 API 만들기

📦 패키지 구조 예시

com.example.demo
├── controller
│   └── UserController.java
├── service
│   └── UserService.java
├── mapper
│   └── UserMapper.java
├── domain
│   └── User.java
└── DemoApplication.java

1️⃣ 도메인 객체: User

package com.example.demo.domain;

import lombok.Data;

@Data
public class User {
    private Long id;
    private String username;
    private String email;
}

2️⃣ Mapper 인터페이스 & XML
UserMapper.java

package com.example.demo.mapper;

import com.example.demo.domain.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
    User findById(Long id);
}

UserMapper.xml

<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="findById" resultType="com.example.demo.domain.User">
        SELECT id, username, email
        FROM users
        WHERE id = #{id}
    </select>
</mapper>

3️⃣ Service 클래스

package com.example.demo.service;

import com.example.demo.domain.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserMapper userMapper;

    public UserService(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public User getUserById(Long id) {
        return userMapper.findById(id);
    }
}

4️⃣ Controller 클래스

package com.example.demo.controller;

import com.example.demo.domain.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/users")
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

🚀 실행 결과


GET http://localhost:8080/api/users/1

Response:
{
  "id": 1,
  "username": "ddokddok",
  "email": "ddok@example.com"
}

✅ 정리 요약

계층설명
ControllerAPI 진입점, 요청/응답 처리
Service로직 처리, 트랜잭션 관리
MapperSQL 쿼리 실행 (MyBatis XML or 어노테이션)
DomainDB와 매핑될 객체
profile
멋쟁이 개발자

0개의 댓글