본문 바로가기
GD's IT Lectures : 기초부터 시리즈/스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동

[스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] 마이바티스 기초

by GDNGY 2023. 5. 6.

5. 마이바티스 기초

마이바티스의 기본적인 개념과 사용 방법에 대해 다룹니다. 마이바티스는 자바 개발자들이 데이터베이스와 상호 작용할 수 있도록 해주는 프레임워크입니다. 이번 섹션에서는 마이바티스의 주요 구성 요소인 매퍼, 쿼리, 결과 매핑 등에 대해 다룹니다. 또한, 마이바티스의 기본적인 설정 방법과 함께 예제를 통해 마이바티스를 사용하는 방법을 익힐 수 있습니다. 이를 통해 마이바티스를 사용하여 데이터베이스와 상호 작용하는 방법에 대한 이해를 높일 수 있으며, 이후 섹션에서 다룰 스프링 부트와 마이바티스를 함께 사용하는 방법의 기반이 됩니다.

 

5.1. 마이바티스 설정 파일 작성

5.1.1. mybatis-config.xml 작성

마이바티스 설정 파일인 mybatis-config.xml을 작성하여 마이바티스의 전반적인 설정을 관리할 수 있습니다. 보통 프로젝트의 src/main/resources 디렉토리에 위치시킵니다. 기본 구조는 아래와 같습니다.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 설정 옵션들을 여기에 추가 -->
</configuration>

 

5.1.2. 마이바티스 설정 파일 위치 지정

스프링 부트에서 마이바티스 설정 파일을 사용하려면, 해당 파일의 위치를 지정해주어야 합니다. application.properties 또는 application.yml 파일에 아래와 같이 설정해 줍니다.

 

'application.properties' 

mybatis.config-location=classpath:mybatis-config.xml

 

application.yml

mybatis:
  config-location: classpath:mybatis-config.xml

 

이제 마이바티스 설정 파일이 스프링 부트와 연동되었습니다. 설정 파일에 필요한 설정 옵션들을 추가하여 마이바티스의 동작을 구성할 수 있습니다.

 

 

5.2. SQL 매퍼 작성

5.2.1. XML 기반 매퍼 작성

XML 기반 매퍼는 SQL 쿼리와 결과 매핑 설정을 XML 파일에 작성합니다. 파일명은 [매퍼명]Mapper.xml 형식으로 작성하며, 보통 src/main/resources/mapper 디렉토리에 위치시킵니다. 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.매퍼명">
    <!-- SQL 매핑 정의 -->
</mapper>

 

5.2.2. 인터페이스 기반 매퍼 작성

인터페이스 기반 매퍼는 SQL 쿼리와 결과 매핑 설정을 자바 인터페이스에 작성합니다. 인터페이스에는 MyBatis 어노테이션을 사용하여 SQL 쿼리를 정의하며, 보통 src/main/java/com/example/mapper 디렉토리에 위치시킵니다.

 

예를 들어, UserMapper 인터페이스를 작성하는 경우 아래와 같이 정의할 수 있습니다.

package com.example.mapper;

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

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(int id);
}

 

SQL 매퍼를 작성하여 마이바티스와 데이터베이스 간의 쿼리 실행 및 결과 매핑을 구성할 수 있습니다. XML 기반과 인터페이스 기반 중 프로젝트 요구 사항과 개발 스타일에 따라 적절한 방식을 선택하여 사용하면 됩니다.

 

5.3. 마이바티스 어노테이션 사용

5.3.1. @Select, @Insert, @Update, @Delete

MyBatis는 인터페이스 기반 매퍼에서 어노테이션을 사용하여 SQL 쿼리를 작성할 수 있습니다. 대표적인 어노테이션으로는 @Select, @Insert, @Update, @Delete가 있습니다.

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(int id);

    @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
    int insertUser(User user);

    @Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
    int updateUser(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    int deleteUser(int id);
}

 

5.3.2. @Results, @ResultMap

@Results와 @ResultMap 어노테이션을 사용하여 데이터베이스 컬럼과 도메인 객체의 속성 간 매핑을 설정할 수 있습니다.

 

@Results는 여러 개의 @Result를 묶어서 한 번에 컬럼-속성 매핑을 정의합니다.

@Select("SELECT id, name, age FROM user WHERE id = #{id}")
@Results({
    @Result(column = "id", property = "id"),
    @Result(column = "name", property = "name"),
    @Result(column = "age", property = "age")
})
User findById(int id);

 

@ResultMap은 별도의 XML 파일에 정의된 resultMap을 참조하여 매핑 설정을 가져옵니다. 아래 예제에서는 userResultMap이라는 resultMap을 참조합니다.

<!-- mybatis-config.xml -->
<resultMap id="userResultMap" type="com.example.domain.User">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="age" property="age"/>
</resultMap>
@Select("SELECT id, name, age FROM user WHERE id = #{id}")
@ResultMap("userResultMap")
User findById(int id);

 

마이바티스 어노테이션을 사용하여 인터페이스 기반 매퍼에서 SQL 쿼리와 컬럼-속성 매핑을 설정할 수 있습니다. 어노테이션을 사용하면 코드가 간결해지고, 개발 과정에서 타입 체크와 같은 컴파일 타임 검사를 받을 수 있습니다.

 

 

 

2023.05.06 - [프로그래밍/스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] - [스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] 데이터베이스 설정

 

[스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] 데이터베이스 설정

4. 데이터베이스 설정 마이바티스를 사용하기 위해 데이터베이스를 설정하는 방법에 대해 다룹니다. 데이터베이스는 대부분의 웹 애플리케이션에서 필수적으로 사용되는 요소이며, 이를 스프

gdngy.tistory.com

 

반응형

댓글