Post

04 mybatis

04 mybatis

1. mybatis

1. mybatis

  • SQL Mapper 프레임워크
  • 직접 작성한 SQL을 매핑해서 Java 객체와 연동
  • JDBC 기반 → 커넥션 풀(HikariCP 등)과 함께 사용
  • 특징: SQL 제어권을 개발자가 직접 갖는다

2. 특징

항목내용
SQL 작성직접 SQL 작성 → 복잡한 쿼리도 자유롭게 사용 가능
객체 매핑ResultMap/자동 매핑으로 SQL 결과 → 객체 변환
유연성ORM보다 자유로운 SQL 제어 가능
커넥션JDBC 기반 → DataSource(HikariCP 등) 사용
트랜잭션스프링 @Transactional과 연동 가능

3. mybatis 흐름

1
2
3
4
5
6
7
8
9
10
Java 코드
   │
   ▼
Mapper Interface(Java에서 호출할 메서드 정의) / XML(SQL 문과 ResultMap 정의) 
   │
   ▼
SQL 실행
   │
   ▼
ResultMap → Java Object (SQL 결과를 Java 객체로 매핑)

2. mybatis 사용법

1. 유저객체

1
2
3
4
5
@Data
public class User {
    private Long id;
    private String name;
    private String email;
  • 리턴타입은 자유지만, 필요할 경우 객체로도 사용가능함.

2.애너테이션으로 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Mapper
public interface UserMapper {

    @Select("SELECT id, name, email FROM users WHERE id = #{id}")
    User findById(@Param("id") Long id);

    @Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insert(User user);

    @Update("UPDATE users SET email = #{email} WHERE id = #{id}")
    void updateEmail(@Param("id") Long id, @Param("email") String email);

    @Delete("DELETE FROM users WHERE id = #{id}")
    void delete(@Param("id") Long id);
}
  • XML 없이 SQL 작성 가능
  • Mapper 인터페이스 중심
  • 간단 CRUD나 작은 프로젝트에 적합
  • 스프링 트랜잭션, 커넥션 풀과 완전히 통합 가능

3. Mapper.xml

1. XML파일 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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">

    <resultMap id="userResultMap" type="com.example.model.User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="email" column="email"/>
    </resultMap>
    
    <select id="findById" parameterType="long" resultMap="userResultMap">
        SELECT id, name, email
        FROM users
        WHERE id = #{id}
    </select>
~~~~
  • resources/mapper/ 폴더에 위치

    2. Mapper 인터페이스

    1
    2
    3
    4
    5
    6
    
    public interface UserMapper {
     User findById(Long id);
     void insert(User user);
     void updateEmail(Long id, String email);
     void delete(Long id);
    }
    
  • 메서드 이름 = XML의
  • 파라미터 타입, 반환 타입도 XML과 매핑

3. 매퍼 sacn

1
2
3
@SpringBootApplication
@MapperScan("com.example.mapper") // Mapper 인터페이스 스캔
public class Application { }

4. JAVA

1
2
3
4
5
6
7
8
9
10
11
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    @Transactional
    public void register(User user) {
        userMapper.insert(user);
    }
}

3. note

This post is licensed under CC BY 4.0 by the author.