프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

개발/Spring DataBase

[Spring DB] 8. MyBatis

EVEerNew 2022. 7. 26. 22:34
반응형

 

 

 

* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. *

 

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

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

www.inflearn.com

 

 

 

이전 글에서는 데이터 베이스의 테스트 세팅 방법에 대해 공부하였다.

 

 

 

MyBatis

 

MyBatis는 JdbcTemplate의 기능을 대부분 지원하면서 추가적으로 동적 쿼리도 편하게 작성할 수 있다.

또는 XML문서에 동적 쿼리 SQL을 작성해 놓을 수도 있다.

단,  스프링의 내장 기능이 아니기 때문에 설정이 필요하다.

 

 

MyBatis는 공식 문서가 번영되어 있으므로 참고하자.

 

https://mybatis.org/mybatis-3/ko/index.html

 

MyBatis – 마이바티스 3 | 소개

마이바티스는 무엇인가? 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와

mybatis.org

 

 

마이바티스도 DB의 언더 스코어 표기법과 자바의 camel 표기법을 매핑해주는 기능을 제공한다.

application.properties에 필요한 설정을 해주자.

mybatis.configuration.map-underscore-to-camel-case=true

 

 

@Mapper //MyBatis의 매핑 XML을 호출 -> 메서드 실행시, 해당 XML의 SQL이 실행됨
public interface ItemMapper {

    void save(Item item);

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

    Optional<Item> findById(Long id);

    List<Item> findAll(ItemSearchCond itemSearch);
}

@Mapper로 같은 이름의 xml파일을 매핑시킬 수 있다.(resource에서의 경로도 동일해야 함)

 

 

SQL의 select 구문이라면 select 태그를 사용한다. (Update는 update)

이때 id에는 메서드의 이름을 매핑시키면, 해당 메서드 호출 시 SQL이 실행된다.

<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>

파라미터는 #{name}으로 지정하는데, 메서드의 매개변수를 그대로 사용할 수 있는 장점이 있다.

매개변수가 한 개라면 그대로 사용할 수 있지만, 여러 개라면 @Param("이름")으로 구분시켜 사용한다.

 

 

select의 조회 결과는 명시한 resultType="Item" 으로 자동 변환해 반환해준다.

이때 table의 column명과 타입의 변수명이 같아야 한다.

 

 

<where>와 <if>로 동적 쿼리를 만들 수 있다.

where 내부의 if가 모두 실패하면 where는 sql에 추가되지 않는다.

하나라도 성공한다면 where 구문이 붙는다.

 

 

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함