안녕세계

[Spring] MyBatis API 개발 예제 본문

[Spring] MyBatis API 개발 예제

Junhong Kim 2020. 9. 27. 17:06
728x90
반응형

 

안녕하세요.

지난 포스팅에서는 SpringBoot 환경에 MyBatis를 연동해보았습니다.

이번 포스팅에서는 SpringBoot 환경에서 MyBatis를 활용한 API 개발 예제에 대해 알아봅니다.

 

JPA에서는 Entity 클래스를 생성하고, Entity에 대응되는 JpaRepository를 생성해주어야 하는데,

MyBatis에서는 Mapper 인터페이스를 생성하고, Mapper 클래스에 대응되는 XML 파일을 만들어야합니다.

 

본 예제에서는 API 요청을 위한 Controller를 먼저 만들고,

Controller에서 필요한 클래스부터 파일을 하나씩 생성해봅니다. 😎

1. Controller 클래스 생성

// kim.junhong.expmybatish2.api.test.controller

@RestController
@RequestMapping("/api/test")
@RequiredArgsConstructor
public class TestController {

    private final TestService testService;

    @PostMapping
    public void addTest(@RequestBody Test.AddTestParam param) {
        testService.addTest(param);
    }
}

Controller에서 POST /api/test 요청시 RequestBody로 Test.AddTestParam을 받도록 정의합니다.

TestService와 Test 클래스는 다음 스텝에서 생성합니다.

2. DTO 클래스 생성

// kim.junhong.expmybatish2.api.test.dto

public class Test {

    private Test() {
        throw new IllegalStateException();
    }

    @Getter
    @Setter
    public static class AddTestParam {
        Long id;
        String name;
        Integer age;
    }
}

API 개발시 요청 값과 응답 값은 보통 DTO를 사용하여 처리합니다.

예제에서는 Controller에 대응하는 DTO 클래스(=Test)에 Inner 클래스(=AddTestParam)로 정의하여 사용합니다.

3. Service 클래스 생성

// kim.junhong.expmybatish2.api.test.service

@Service
@RequiredArgsConstructor
public class TestService {

    private final TestMapper testMapper;

    @Transactional
    public void addTest(Test.AddTestParam param) {
        testMapper.addTest(param);
    }
}

Test 데이터 추가를 위한 addTest() 메서드를 생성하고,

TestMapper.addTest() 메서드를 통해 실제 SQL Query가 실행되도록 합니다.

4. Mapper 클래스 생성

// kim.junhong.expmybatish2.api.test.mapper

@Component
@Mapper
public interface TestMapper {

    void addTest(@Param("param") Test.AddTestParam param);
}

@Mapper 어노테이션을 추가하여 Mapper 인터페이스 생성하였다면, 이에 대응되는 XML 파일을 연결해야합니다.

(이때, Mapper 인터페이스 경로는 DataSourceConfig에 설정한 @MapperScan 정보와 일치해야합니다.)

 

@Param 어노테이션을 사용하여 필요한 Parameter를 넘길 수 있으며,

예제에서는 Test.AddTestParam 클래스를 Parameter로 전달합니다.

5. Mapper XML 생성

<!-- classpath:mybatis/mapper/TestMapper.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="kim.junhong.expmybatish2.api.test.mapper.TestMapper">

    <insert id="addTest" useGeneratedKeys="true" keyProperty="param.id">
        INSERT INTO
            test (name, age)
        VALUES
            (#{param.name}, #{param.age})
    </insert>
</mapper>

<mapper/> 태그의 namespace는 정확히 TestMapper 인터페이스 경로와 일치해야합니다.

그래야지만 TestMapper 인터페이스에 해당하는 Mapper XML 정보로 인식됩니다.

 

<insert/> 태그를 사용하여 SQL Query 실행시 필요한 설정을 합니다.

useGeneratedKeys는 이전에 id를 auto_increment로 지정해두었기 때문에 true로 지정하고,

해당 키가 무엇인지 keyProperty 속성을 사용하여 지정합니다.

 

그리고 <insert/> 태그 내부에 실제 동작할 SQL Query를 명시해줍니다.

#{..} 구문을 통해서 Mapper 인터페이스로 넘어온 파라미터를 사용할 수 있습니다.

 

이제 서버를 실행후, Postman으로 다음과 같이 API를 요청해주세요. 🧐

 

마지막으로 데이터가 정상적으로 추가되었는지 확인해봅시다.

 

지금까지 MyBatis를 활용한 API 개발 과정을 간단한 예제를 통해 알아보았습니다.

감사합니다. ☺️

 
728x90
반응형
Comments