개요

- 마이바티스는JDBC를 대체하는 Persistence Framework이다.

- 즉, 개발자는 SQL문을 작성하고 Mybatis는 JDBC를 사용해 실행한다. ( 아래에 과정을 참조 )

- ORM 프레임워크가 아닌 SQL 매퍼이다. ( ORM은 객체 간의 관계를 자동으로 설정해주지만 Mybatis는 명시 해줘야함 )

- 트랜잭션을 관리한다.

 

 

 

Mybatis를 왜 사용하는가?

- JDBC 코드를 작성하는 일에는 코드를 복사하고 붙쳐넣으며 많은 시간이 소요된다. 그리고 그만큼 오류도 빈번히 발생한다.

- 마이바티스는 객체 지향 언어인 자바에서 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 하도록 도와주는 프레임워크이다.

 

 

 

 

사용 과정

1. MySQL에 테이블을 생성한다.
2. Spring gradle에 Mybatis, Mysql Library를 위한 라이브러리를 작성하고 yml에 mybatis를 위한 설정을 해준다.
3. Mybatis를 활용하기 위해 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="kia.com.mybatistest.model.dao.UserMapper">

    <resultMap id="UserDto" type="kia.com.mybatistest.model.dto.UserDto">
        <result property="userId" column="user_id"/>
        <result property="userName" column="user_name"/>
        <result property="userEmail" column="user_email"/>
        <result property="userPassword" column="user_password"/>
        <result property="createAt" column="create_at"/>
        <result property="modifyAt" column="modify_at"/>
    </resultMap>

    <select id="findByIdAndPassword" resultType="kia.com.mybatistest.model.dto.UserDto">
        SELECT user_email, user_password
        FROM users
        WHERE user_email=#{userEmail}
          AND user_password=#{userPassword}
    </select>

    <select id="saveUser" resultMap="UserDto">
        INSERT INTO users(user_name, user_email, user_password, create_at, modify_at)
        VALUES (#{userName},
                #{userEmail},
                #{userPassword},
                DATE_FORMAT(#{createAt}, '%Y-%m-%d %H:%i:%s'),
                now()
                );
    </select>
</mapper>​

위 코드와 같이 Query문을 작성하고, resultMap을 활용해 객체 클래스와 같은 필드를 가진 Map을 만들어준다.
그리고 여기서 id값은 자바 메소드와 매핑된다.

4. 관련 DTO를 만들어준다.
5. 기능을 수행할 DAO를 만들어준다.

@Repository
@Mapper
public interface UserMapper {
    List<UserDto> getAllUserDataList();
    UserDto saveUser(UserDto userDto);
    UserDto findById(Long id);
    UserDto findByIdAndPassword(LoginUserDto loginUserDto);
}

이와 같이 @Mapper 어노테이션을 통해서 위의 xml 네이밍과 매핑이 되서 서비스 클래스에서 사용할 수 있게된다.

6. 위의 매퍼를 활용해 레포지토리와 서비스를 만들어준다.

 

 

'mybatis' 카테고리의 다른 글

트랜잭션 관리  (0) 2023.09.14
WHERE 절은 왜 OUTER JOIN 에서 데이터를 누락시키는가?  (0) 2023.09.13
mybatis associate, collection, alias  (0) 2023.09.12
Spring + MySQL + Mybatis  (0) 2023.08.17

+ Recent posts