[Spring] MyBatis 개념정리 🤩

2025. 1. 20. 15:38·Spring
728x90

MyBatis란?

먼저 MyBatis부터 알아보자.

MyBatis는 자바 진영에서 널리 사용되는 퍼시스턴스 프레임워크(Persistence Framework)이다.

🤔Persistence Framework?🤔
-> 데이터베이스와의 연동되는 시스템을 빠르게 개발하고 안정적인 구동을 보장해주는 프레임워크
종류에는
SQL Mapper(SQL문장으로 직접 데이터베이스를 다루는 SQL Helper) : e.g. Mybatis,
ORM (객체를 통해 간접적으로 데이터베이스를 다루는 ORM) : e.g. Hibernate, JPA가 있다.


개발자가 SQL을 직접 제어하면서도 JDBC의 복잡한 설정을 간소화할 수 있게 해주는 강력한 도구라고 볼 수 있다.

JDBC를 사용할 때 필요한 반복적인 코드(커넥션 관리, PreparedStatement 생성, ResultSet 처리 등)을 MyBatis가 자동으로 처리해준다는 장점이 있다!


MyBatis의 핵심 구성 요소

MyBatis의 핵심 구성 요소로는 두 가지가 있다.

1. SqlSessionFactory

SqlSessionFactory는 MyBatis의 핵심 컴포넌트로, 데이터베이스와의 연결과 SQL 실행을 위한 세션을 생성한다.

@Configuration
public class MyBatisConfig {
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        return sessionFactory.getObject();
    }
}

위 코드는 Spring Boot 환경에서 SqlSessionFactory를 설정하는 기본적인 방법을 보여준다.

DataSource를 주입받아 SqlSessionFactory를 생성하는 것을 위 예시를 통해 볼 수 있다.

2. Mapper 인터페이스

Mapper 인터페이스는 SQL 문을 실행하기 위한 메서드를 정의하는 인터페이스이다.

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(Long id);
    
    @Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
    void insertUser(User user);
}

위 예시는 간단한 Mapper 인터페이스를 보여주는데, 어노테이션을 사용하여 SQL을 직접 정의 할 수도 있고,

<?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.UserMapper">
    <select id="getUserById" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

위의 예시처럼 XML 매핑 파일을 통해서도 SQL을 관리할 수 있다.

XML 매핑 방식은 SQL 쿼리를 별도의 XML 파일로 관리할 수 있어 복잡한 쿼리나 동적 SQL을 작성할 때 유용하다.


그럼 MyBatis와 Spring을 어떻게 연동시킬까?

Spring과 MyBatis를 연동하면 Spring의 강력한 DI(의존성 주입)와 트랜잭션 관리 기능을 활용할 수 있다는 것은 위에서도 설명이 되었기에 이해할 것이다.

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

이렇게 MyBatis Spring Boot Starter를 사용하면 별도의 복잡할 설정 없이도 Spring Boot 애플리케이션에서 MyBatis를 바로 사용할 수 있다.

728x90

'Spring' 카테고리의 다른 글

[Spring] ✨ QueryDSL 개념알기 ✨  (1) 2025.01.20
[Spring] JPA와 Spring Data JPA가 뭘까???  (0) 2025.01.20
[Spring] JdbcTemplate으로 데이터베이스 접근하기!  (1) 2025.01.20
[Spring] 🔎 DataSource와 트랜잭션 개념정리 🔎  (2) 2025.01.20
[Spring] Controller의 Return Type과 Parameter 가이드 👍  (1) 2025.01.20
'Spring' 카테고리의 다른 글
  • [Spring] ✨ QueryDSL 개념알기 ✨
  • [Spring] JPA와 Spring Data JPA가 뭘까???
  • [Spring] JdbcTemplate으로 데이터베이스 접근하기!
  • [Spring] 🔎 DataSource와 트랜잭션 개념정리 🔎
프론트 개발자 김현중
프론트 개발자 김현중
👋반갑습니다 저는 나눔을 실천하는 개발자 꿈나무 김현중입니다⌨️🚀
  • 프론트 개발자 김현중
    삥구의 개발블로그
    프론트 개발자 김현중
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • 알고리즘 (5)
      • Swift (3)
      • 컴퓨터네트워크 (1)
      • React (38)
      • Docker (1)
      • SQL (8)
      • Database (2)
      • 배포 (1)
      • Spring (9)
      • TypeScript (5)
      • Next.js (12)
      • Git (1)
      • 회고 (1)
      • 컴퓨터그래픽스 (2)
      • Python (1)
      • Brew (1)
      • LangChain (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    nextjs
    Backend
    프론트엔드
    MySQL
    ReactHooks
    javascript
    appRouter
    frontend
    데이터베이스
    springboot
    알고리즘
    typescript
    Next.js
    Spring
    웹개발
    코딩테스트
    백준
    java
    react
    database
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.1
프론트 개발자 김현중
[Spring] MyBatis 개념정리 🤩
상단으로

티스토리툴바