Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. *
이전 글에서는 데이터 베이스의 테스트 세팅 방법에 대해 공부하였다.
MyBatis
MyBatis는 JdbcTemplate의 기능을 대부분 지원하면서 추가적으로 동적 쿼리도 편하게 작성할 수 있다.
또는 XML문서에 동적 쿼리 SQL을 작성해 놓을 수도 있다.
단, 스프링의 내장 기능이 아니기 때문에 설정이 필요하다.
MyBatis는 공식 문서가 번영되어 있으므로 참고하자.
https://mybatis.org/mybatis-3/ko/index.html
마이바티스도 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 <= #{maxPrice}
</if>
</where>
</select>
파라미터는 #{name}으로 지정하는데, 메서드의 매개변수를 그대로 사용할 수 있는 장점이 있다.
매개변수가 한 개라면 그대로 사용할 수 있지만, 여러 개라면 @Param("이름")으로 구분시켜 사용한다.
select의 조회 결과는 명시한 resultType="Item" 으로 자동 변환해 반환해준다.
이때 table의 column명과 타입의 변수명이 같아야 한다.
<where>와 <if>로 동적 쿼리를 만들 수 있다.
where 내부의 if가 모두 실패하면 where는 sql에 추가되지 않는다.
하나라도 성공한다면 where 구문이 붙는다.
'개발 > Spring DataBase' 카테고리의 다른 글
[Spring DB] 10. Spring Data JPA와 Querydsl (0) | 2022.07.28 |
---|---|
[Spring DB] 9. JPA (0) | 2022.07.27 |
[Spring DB] 7. DataBase Test, 임베디드 DB (0) | 2022.07.25 |
[Spring DB] 6. 프로필과 JdbcTemplate (0) | 2022.07.24 |
[Spring DB] 5. 런타임 예외의 활용 (0) | 2022.07.21 |