[portfolio] 스프링 부트와 마이바티스 연동

박이레·2023년 10월 16일
0

portfolio

목록 보기
6/20

 iBatis에서 이어진 MyBatis는 훌륭한 SQL Mapper입니다. JPA 등 훌륭한 ORM 등이 있지만, 복잡한 연관관계에는 Query를 직접 입력하는 MyBatis처럼 훌륭한 프레임워크는 없습니다.

이번 글에서는 스프링 부트와 MyBatis를 연동합니다.

이전 글에서 MariaDB를 연동했어야 진행할 수 있습니다.


Dummy Data 생성

먼저 Dummy Data를 생성합니다. 터미널이나 DBeaver에서 실행합니다. 이전 글에서 portfolio라는 이름의 DB와 TB_TEST라는 테이블을 작성한 상태입니다.

INSERT INTO TB_TEST (name, content)
VALUES ('테스트 이름 1', '테스트 내용 1'),
       ('테스트 이름 2', '테스트 내용 2'),
       ('테스트 이름 3', '테스트 내용 3');

아래는 DBeaver 화면입니다. 테스트용 데이터가 저장된 것을 확인할 수 있습니다.

application.properties 작성

main > resources > application.properties에 아래 코드가 있어야 합니다.(저는 초기 프로젝트 세팅에서 작성했습니다.) 아래 코드는 Query가 입력된 xml 파일과 myBatis를 연동하는 역할을 합니다.

mybatis.mapper-locations=classpath:mappers/**/*.xml

VO 작성

VO는 Value Object, 즉 값 객체라는 뜻입니다. 객체와 객체가 통신할 때 담는 그릇이라고 생각하면 됩니다. main > java > com.portfolio > domain 아래에 TestVO를 작성합니다. TestVO는 앞서 만든 TB_TEST에 대응하는 Entity입니다.

package com.portfolio.domain;

import lombok.Data;

@Builder
@Data
public class TestVO {

    private int id;
    private String name;
    private String content;
}

mapper 작성

mapper는 interface입니다. Query가 작성된 xml과 대응합니다.

package com.portfolio.mapper;

import com.portfolio.domain.TestVO;

public interface TestMapper {

    void create(TestVO vo);
}

xml 작성

xml은 실제 Query를 작성하는 부분입니다. main > resources > mappers 아래에 작성합니다. <mapper namespace> xml에 대응하는 mapper interface를 작성합니다.

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

    <insert id="create">
        INSERT INTO TB_TEST(NAME, CONTENT)
        VALUES (#{NAME}, #{CONTENT})
    </insert>

</mapper>

MyBatis Test 코드 작성

test > java > com.portfolio > 아래에 mybatis 폴더를 생성합니다. MyBatisTests 이름의 클래스를 생성하고 아래 코드를 입력합니다.

package com.portfolio.mybatis;

import com.portfolio.domain.TestVO;
import com.portfolio.mapper.TestMapper;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;

@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)
@MybatisTest
public class MyBatisTests {


    @Autowired(required = false)
    private TestMapper mapper;

    @Test
    public void create() {
        TestVO testVO = TestVO.builder()
                .name("test")
                .content("test")
                .build();

        mapper.create(testVO);
    }
}
profile
혜화동 사는 Architect

0개의 댓글