티스토리 뷰

Spring

[ 스프링 DB ] MyBatis

GiHoo 2023. 8. 29. 11:07

MyBatis의 특징, 언제 사용해야 하는지

  • JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper
  • SQL을 XML에 편리하게 작성할 수 있다. ( 자바 코드에서 사용하지 않아 혼동하지 않을 수 있음 )
  • 동적 쿼리를 편안하게 작성할 수 있다.
// 자바에서 동적 쿼리
String sql = "select id, item_name, price, quantity from item";
//동적 쿼리
if (StringUtils.hasText(itemName) || maxPrice != null) {
 sql += " where";
}
boolean andFlag = false;
if (StringUtils.hasText(itemName)) {
 sql += " item_name like concat('%',:itemName,'%')";
 andFlag = true;
}
if (maxPrice != null) {
 if (andFlag) {
 sql += " and";
 }
 sql += " price <= :maxPrice";
}
log.info("sql={}", sql);
return template.query(sql, param, itemRowMapper());

// XML에서 동적 쿼리
<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>

위와 같이 동적 쿼리를 보다 쉽게 작성할 수 있다.

진행하려는 프로젝트의 동적 쿼리가 많다면 MyBatis를, 단순하다면 JdbcTemplate를 적절하게 선택하자.

 

활용

마이바티스 매핑 XML을 호출해주는 매퍼 인터페이스

@Mapper 애노테이션을 통해 MyBatis가 인식할 수 있다.

인터페이스 구현체의 메서드를 호출하면 xml 매핑 파일에서 sql을 실행하고 결과를 반환한다.

 

기본적으로는 매퍼 인터페이스와 xml 매핑 파일은 디렉토리의 위치를 잘 맞춰줘야 한다.

  • 인터페이스 - java 하위 hello.itemservice.repository.mybatis
  • xml 파일 - resources 하위 hello.itemservice.repository.mybatis

xml 파일의 sql

일단 sql을 작성하기 매우 편해졌다. 기존 자바 코드 사이에 존재하던 sql을 가볍게 사용할 수 있다.

findAll 같이 동적 쿼리의 경우, 더욱 간편하게 사용할 수 있는 것을 확인할 수 있을 것이다.

-> 기존 자바 코드에서 if문과 sql에 "and" 와 같은 내용을 추가하는 것과 다르게 조건문을 쉽게 사용한다.

MyBatis는 <where> 과 <if> 같은 쿼리 문법으로 동적 쿼리를 지원한다.

 

 

MyBatis 스프링 연동 모듈의 처리 원리

  1. 애플리케이션 로딩 시점에 MyBatis 스프링 연동 모듈은 @Mapper가 있는 인터페이스를 조회한다.
  2. 해당 인터페이스를 동적 프록시 기술로 구현체를 생성한다.
  3. 해당 구현체를 스프링 빈으로 등록한다.

매퍼 구현체를 통해 MyBatis 기술을 스프링에 편리하게 통합하여 사용할 수 있다.

구현 뿐 아니라, 예외 추상화나 데이터베이스 커넥션, 트랜잭션 기능도 함께 연동 및 동기화를 도와준다,.

 

MyBatis의 동적 SQL

if - 해당 조건에 따라 값을 추가할지 말지 판단한다. 

choose, when, otherwise

 - when과 otherwise 중 하나를 choose하는 문법, 자바의 switch와 비슷하다.

where

 - 문장이 없으면(조건이 안맞으면) where을 추가하지 않는다. 

 - and가 먼저 시작된다면 and를 지우고 시작한다.

foreach

 - 컬렉션을 반복 처리할 때 사용한다. 파라미터로는 List를 전달한다.

 

 

 

 

 

본 포스팅은 인프런 강의 김영한님의

[ 스프링 DB 2편 - 데이터 접근 활용 기술 ] 을 수강하며 작성한 내용입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
«   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