개요
- 마이바티스는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 |