Spring Boot

[Spring Boot] Mybatis API 서버 만들기

최 재호 2025. 2. 17. 18:07

(작성 중인 글입니다. 직접 서비스 올리며 글 수정 예정입니다.)

(postgres 와 연동 예정입니다)

 

mybatis-demo
 ┣ src
 ┃ ┗ main
 ┃   ┣ java
 ┃   ┃ ┗ com
 ┃   ┃   ┗ example
 ┃   ┃     ┗ demo
 ┃   ┃       ┣ DemoApplication.java       // 스프링부트 메인
 ┃   ┃       ┣ MyDataController.java      // 컨트롤러
 ┃   ┃       ┣ MyDataMapper.java          // 매퍼 인터페이스
 ┃   ┃       ┗ MyData.java                // DTO
 ┃   ┗ resources
 ┃     ┣ application.properties
 ┃     ┗ mapper
 ┃       ┗ MyDataMapper.xml               // 매퍼 XML
 ┗ pom.xml

 

 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="
             http://maven.apache.org/POM/4.0.0 
             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>mybatis-demo</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <properties>
        <java.version>17</java.version>
        <spring-boot.version>3.0.2</spring-boot.version>
        <mybatis-spring-boot.version>3.0.0</mybatis-spring-boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- Spring Boot Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- MyBatis Spring Boot Starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot.version}</version>
        </dependency>

        <!-- DB 드라이버: 여기서는 테스트용으로 H2 인메모리 DB -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- DB 드라이버: Postgres Driver -->
        <dependency>
            <groupId> org.postgresql </groupId>
            <artifactId> postgresql </artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Spring Boot Maven Plugin -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 

application.properties

# DB 설정(H2 인메모리 예시)
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# PostgreSQL 설정 (예시)
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=postgres
spring.datasource.password=postgres

# (선택) PostgreSQL 드라이버 명시
spring.datasource.driver-class-name=org.postgresql.Driver

# MyBatis XML 매퍼 위치
mybatis.mapper-locations=classpath:mapper/*.xml

# (선택) 콘솔에 SQL 찍고 싶다면
#logging.level.org.mybatis=DEBUG

 


Application 메인 클래스

package com.example.demo.dto;

public class MyData {
    private int id;
    private String name;

    // Getter/Setter
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

 

DTO (MyData.java)

package cohttp://m.example.demo.dto;

public class MyData {
    private int id;
    private String name;

    // Getter/Setter
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

 

Mapper 인터페이스 (MyDataMapper.java)

 

package cohttp://m.example.demo.mapper;

import cohttp://m.example.demo.dto.MyData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface MyDataMapper {
    // 단일 행 조회
    MyData selectById(@Param("id") int id);
}

 

XML 매퍼 (MyDataMapper.xml)

 

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cohttp://m.example.demo.mapper.MyDataMapper">
    
    <select id="selectById" resultType="cohttp://m.example.demo.dto.MyData">
        SELECT Id AS id,
               Name AS name
        FROM MyTable
        WHERE Id = #{id}
    </select>

</mapper>

 

Controller (MyDataController.java)

package cohttp://m.example.demo.controller;

import cohttp://m.example.demo.dto.MyData;
import cohttp://m.example.demo.mapper.MyDataMapper;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/mydata")
public class MyDataController {

    private final MyDataMapper myDataMapper;

    public MyDataController(MyDataMapper myDataMapper) {
        this.myDataMapper = myDataMapper;
    }

    // GET /mydata/1
    @GetMapping("/{id}")
    public MyData getDataById(@PathVariable("id") int id) {
        // DB에서 id=1인 행을 조회
        return myDataMapper.selectById(id);
    }
}
728x90
반응형

'Spring Boot' 카테고리의 다른 글

[Spring Boot] render 로 무료 호스팅 하기  (2) 2025.03.04