1. ORM 개요

데이터 영속성 (Data Persistence)

ORM (Object Relational Mapping)

예시: Student 객체 ↔ Student 테이블

DB 테이블 (컬럼) Java 객체 (필드)
id: int int id
name: varchar(20) String name
birth: char(10) String birth
hp: varchar(13) String hp
year: tinyint int year

2. MyBatis 개요

MyBatis

3. MyBatis 주요 컴포넌트

컴포넌트 설명
SqlSessionFactory SqlSessionFactory를 Spring의 빈으로 등록하는 클래스
SqlSessionTemplate MyBatis의 SqlSession을 Spring에서 사용할 수 있게 해줌
Mapper Interface SQL 쿼리와 매핑 파일을 연결하는 인터페이스
Mapper XML SQL을 정의하는 XML 파일
@MapperScan MyBatis Mapper 인터페이스를 스캔
@Mapper Mapper 인터페이스를 Spring 빈으로 등록하는 어노테이션

4. Mapper XML 예제

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "<https://mybatis.org/dtd/mybatis-3-mapper.dtd>">

<mapper namespace="kr.co.ch05.dao.User1Mapper">

    <insert id="insertUser1">
        INSERT INTO `user1` VALUES (#{uid}, #{name}, #{hp}, #{age});
    </insert>

    <select id="selectAllUser1" resultType="kr.co.ch05.dto.User1DTO">
        SELECT * FROM `user1`;
    </select>

    <select id="selectUser1" resultType="kr.co.ch05.dto.User1DTO">
        SELECT * FROM `user1` WHERE `uid`=#{uid};
    </select>

    <update id="updateUser1">
        UPDATE user1 SET name=#{name}, hp=#{hp}, age=#{age} WHERE uid=#{uid};
    </update>

    <delete id="deleteUser1">
        DELETE FROM `user1` WHERE uid=#{uid};
    </delete>
</mapper>

5. Service 계층

package kr.co.ch05.service;

import kr.co.ch05.dao.User1Mapper;
import kr.co.ch05.dto.User1DTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class User1Service {

    private final User1Mapper user1Mapper;

    @Autowired
    public User1Service(User1Mapper user1Mapper) {
        this.user1Mapper = user1Mapper;
    }

    public void register(User1DTO user1DTO) {
        user1Mapper.insertUser1(user1DTO);
    }

    public List<User1DTO> findAll() {
        return user1Mapper.selectAllUser1();
    }

    public User1DTO findById(String uid) {
        return user1Mapper.selectUser1(uid);
    }

    public void modify(User1DTO user1DTO) {
        user1Mapper.updateUser1(user1DTO);
    }

    public void delete(String uid) {
        user1Mapper.deleteUser1(uid);
    }
}