waveofmymind
기록하는 습관
waveofmymind
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • 📝 정리 (5)
    • 🌊TIL (9)
    • 💻CS (1)
      • 자료구조 (1)
    • 📙Language (9)
      • ☕Java (6)
      • 🤖Kotlin (3)
    • 🍃Spring (28)
    • 👨🏻‍💻알고리즘 (67)
      • 프로그래머스 (59)
      • 백준 (3)
    • 👷DevOps (4)
      • 🐳Docker (2)
      • 🤵Jenkins (1)

블로그 메뉴

  • 홈
  • Spring
  • Java
  • 알고리즘

공지사항

인기 글

태그

  • 다이나믹 프로그래밍
  • mybatis
  • Spring Security
  • CORS
  • 스프링 부트
  • 힙
  • Connection
  • 코틀린
  • kotest
  • 챗GPT
  • JDBC
  • kotlin
  • til
  • AOP
  • 스프링
  • sql
  • BFS
  • 트랜잭션 전파
  • 스프링 시큐리티
  • Open AI
  • spring
  • spring boot
  • SpringAOP
  • resultset
  • 트랜잭션
  • LeetCode
  • 스택
  • chat GPT
  • 완전탐색
  • 통합테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
waveofmymind

기록하는 습관

[Spring DB] MyBatis 사용하기
🍃Spring

[Spring DB] MyBatis 사용하기

2023. 1. 29. 13:07

MyBatis란?

JdbcTemplate보다 많은 기능을 제공하는 SQL Mapper

SQL을 XML에 편하게 작성할 수 있고, 동적 쿼리를 편리하게 작성할 수 있다.

 

SQL이 여러 줄인 경우 비교

//JdbcTemplate
String sql = "update item " +
 "set item_name=:itemName, price=:price, quantity=:quantity " +
 "where id=:id";
 
 //MyBatis
 <update id="update">
 update item
 set item_name=#{itemName},
 price=#{price},
 quantity=#{quantity}
 where id = #{id}
</update>
  • JdbcTemplate과 같은 경우 SQL이 여러 줄인 경우, 공백으로 인한 오류가 발생할 수 있다.
  • MyBatis의 경우 SQL이 여러줄이여도 XML로 작성하기 때문에 편리하다.

동적 쿼리의 경우, JdbcTemplate은 자바 코드로 직접 동적 쿼리를 작성해야 하지만, MyBatis는 if 태그 등으로 더 편리하게 작성할 수 있다.

 

  • 동적 쿼리와 복잡한 쿼리가 많을 경우 -> MyBatis
  • 단순한 쿼리들이 많을 경우 -> JdbcTemplate

기본

다음과 같이 인터페이스를 작성한다.

@Mapper
public interface ItemMapper {

    void save(Item item);

    void update(@Param("id") Long id, @Param("updateParam")ItemUpdateDto updateDto);

    Optional<Item> findById(Long id);

    List<Item> findAll(ItemSearchCond itemSearch);
}

그리고 resources 폴더 내에, 위 ItemMapper와 동일한 폴더 경로를 만들어서 ItemMapper.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="hello.itemservice.repository.mybatis.ItemMapper">
    <insert id="save" useGeneratedKeys="true" keyProperty="id">
        insert into item (item_name,price,quantity)
        values (#{itemName},#{price},#{quantity})
    </insert>

    <update id="update">
        update item
        set item_name=#{updateParam.itemName},
            price=#{updateParam.price},
            quantity=#{updateParam.quantity}
        where id = #{id}
    </update>

    <select id="findById" resultType="Item">
        select id,item_name,price,quantity
        from item
        where id = #{id}
    </select>

    <select id="findAll" resultType="Item">
        select id,item_name,price,quantity
        from item
        <where>
            <if test="itemName != null and itemName != ''">
                and item_name like concat('%', #{itemName}, '%')
            </if>
            <if test="maxPrice != null">
                and price $lt;= #{maxPrice}
            </if>
        </where>
    </select>

위와 같이 작성할 수 있다.

특히 findAll의 동적 쿼리 부분이 JdbcTemplate에 비해 단순해졌다는 것을 알 수 있다.

 

기능 정리

동적 SQL

마이바티스에서 제공하는 최고의 기능이다. 

  • If: 조건에 따라 추가할지 말지를 정할수 있다.
  • choose (when, otherwise): 자바의 switch 구문과 유사하다.
  • tim,where,set:  
  • foreach: 컬렉션을 반복처리할때 사용한다.

애노테이션으로 SQL 작성

XML 대신, 애노테이션으로 SQL을 작성할 수 있다.

@Select("select id,item_name,price,quantity from item where id=#{id}")
Optional<Item> findById(Long id);
  • @Insert,@Update,@Delete,@Select 기능이 제공된다.
  • 이 경우 XML 내의 해당 SQL문은 제거할 것
  • 동적 SQL이 해결되지 않으므로 권장 X

 

출처

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2

 

스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의

백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인

www.inflearn.com

 

'🍃Spring' 카테고리의 다른 글

[Spring] 트랜잭션 - 프록시 내부 호출 문제 1  (0) 2023.02.03
[Spring] 선언적 트랜잭션 동작 확인하기  (0) 2023.02.03
[Spring DB] 테스트 - 트랜잭션  (0) 2023.01.29
[Spring DB] JDBC Template 사용하기  (0) 2023.01.29
[Spring] Spring이란?  (0) 2023.01.28
    '🍃Spring' 카테고리의 다른 글
    • [Spring] 트랜잭션 - 프록시 내부 호출 문제 1
    • [Spring] 선언적 트랜잭션 동작 확인하기
    • [Spring DB] 테스트 - 트랜잭션
    • [Spring DB] JDBC Template 사용하기
    waveofmymind
    waveofmymind

    티스토리툴바