241210 TIL - MyBatis와 @Mapper, XML Mapper

J_log·2024년 12월 10일
0
post-thumbnail

MyBatis란 ?

MyBatis는 SQL 중심의 데이터 매핑 프레임워크로, Java와 데이터베이스를 연결하는 도구이다. SQL 작성의 자유도를 제공하며, 객체와 데이터베이스 간 매핑을 간소화한다.

MyBatis 주요 사용 방식

MyBatis를 활용할 때 두 가지 주요 접근 방식이 있다.
1. @Mapper를 활용한 간단한 CRUD 작업
2. DAO + XML Mapper를 활용한 체계적인 SQL 관리


@Mapper를 활용한 간단한 CRUD 작업

@Mapper는 간단한 SQL 작업에서 매우 유용하다.
인터페이스에 SQL을 직접 작성하여 Java 코드와 데이터베이스를 매핑한다.

  1. 의존성 추가
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.3.1</version>
</dependency>
  1. Application.yml 설정
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
  1. Entity와 Mapper 인터페이스 작성
public class User {
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}

@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);

    @Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}")
    void updateUser(User user);

    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteUser(Long id);
}

DAO + XML Mapper를 활용한 SQL 관리

  1. Application.yml 설정
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
  mybatis:
    mapper-locations: classpath:mappers/**/*.xml
  1. Entity 클래스 작성
public class User {
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}
  1. DAO 인터페이스 작성
public interface UserDAO {
    User getUserById(Long id);

    void insertUser(User user);

    void updateUser(User user);

    void deleteUser(Long id);
}
  1. XML Mapper 작성
    src/main/resources/mappers/UserMapper.xml 파일에 SQL을 작성한다.
<mapper namespace="com.example.dao.UserDAO">

    <select id="getUserById" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO users (name, email)
        VALUES (#{name}, #{email})
    </insert>

    <update id="updateUser" parameterType="com.example.entity.User">
        UPDATE users
        SET name = #{name}, email = #{email}
        WHERE id = #{id}
    </update>

    <delete id="deleteUser" parameterType="long">
        DELETE FROM users WHERE id = #{id}
    </delete>

</mapper>

@Mapper와 XML Mapper 방식 비교

항목@Mapper 방식DAO + XML Mapper 방식
SQL 관리SQL이 Java 코드에 포함됨, 간단한 CRUD 적합SQL이 XML로 분리, 복잡한 쿼리에 적합
유지보수성SQL과 코드가 섞여 있어 관리가 어려울 수 있음SQL이 분리되어 있어 유지보수에 유리
설정 용이성@Mapper만 추가하면 간단하게 사용 가능XML 파일 작성 필요, 초기 설정 복잡

결론적으로 간단한 CRUD 작업에는 @Mapper 방식을 사용하고 복잡한 SQL 작업이 많은 프로젝트에서는 DAO + XML Mapper 방식을 활용하는 쪽으로 하면 좋을 것 같다.

이번 정리를 통해 MyBatis의 두 가지 주요 사용 방식을 이해하게 되었고 프로젝트 성격에 따라 적절한 방식을 선택하여 활용할 수 있다는 점을 배울 수 있었다.

0개의 댓글