Daily Notebook

[Mybatis] 기본 및 유용한 문법 모음

by 배부른코딩로그
💡 Spring Legacy에서 많이 연동되는 MyBatis에서 사용할 수 있는 유용한 문법들을 정리해보자!

목표

  • Spring과 MyBatis를 연동할 수 있다.
  • MyBatis의 기본 문법들을 작성할 수 있다.
  • MyBatis에서 자주 사용되는 유용한 문법들을 작성하고 활용할 수 있다.

 

마이바티스는 XML 문법으로 작성할 수 있으며, DB Query를 작성할 때 아래와 같이 상황에 맞게 사용하면 된다.

 

마이바티스 기본 문법들

CRUD에 대해서 각각 아래와 같이 편하게 사용이 가능하다. 어떤 명령어가 실행될지를 미리 명시한다고 생각하자.

엘리먼트의 속성값id에는 Mapper Class에 맵핑된 함수명을 기입하며, parameterTyperesultType에는 파라미터로 넣거나 반환받을 타입을 적어주면 된다. SQL문은 텍스트 노드로 복사 붙여넣자.

<select></select>
<insert></insert>
<update></update>
<delete></delete>
<select id="fetchUsers"
	parameterType="com.test.spring.*DTO"
	resultType="com.test.spring.*DTO"
>
	(DB Query)
</select>

 

파라미터 사용

SQL문에서 WHERE 조건을 활용하기 위해서는 파라미터를 활용해야 하고, 다양한 방식의 파라미터들을 어떻게 받는지 알아두어야 한다. 그래야 빨리 만들고 쉴 수 있다. 그래서, 아래와 같이 정리해보았다.

 

① 두 개 이상의 파라미터 - param1, param2

<select>
	SELECT 	*
	FROM 	테이블명
	WHERE 	컬럼=#{param1}
	  AND 	컬럼=#{param2}
</select>

#{param'N'} 으로 표현이 가능하다. 'N'에 몇 번째 파라미터인지 명시를 해줄 수 있다.

사용하는 방법은 어렵진 않지만, 많은 파라미터를 사용하게 된다면 "param1이 뭘 의미하지?"가 반복될 것이다.

중요도가 낮은 곳에서만 사용하길 권장한다.

 

② 배열 파라미터 - String[n]

<select>
	SELECT 	*
	FROM 	테이블명
	WHERE 	컬럼=#{0}
	  AND 	컬럼=#{1}
</select>

#{'N'} 이라는 표현으로 배열의 N번 째 값을 사용할 수 있다.

①번과 마찬가지로 무엇을 의미하는가를 정확하게 표현할 수 없기 때문에 잘 사용하지 않는다.

 

③ @Param 애노테이션 활용 - @Param("커스텀_파라미터명") String cust_id

<select>
	SELECT 	*
	FROM 	테이블명
	WHERE 	컬럼=#{커스텀_파라미터명}
</select>

①, ②번을 사용하기 보다 위의 방식을 자주 사용한다.

코드가 비교적 길어지고 귀찮음이 찾아올 수 있지만, 유지보수 측면에서 파라미터 이름만으로도 어떤 의미를 가지고 있는지 분명하게 파악할 수 있다는 점에서 이 방법을 추천한다.

 

④ 해시맵 파라미터 - Map<string, string> 또는 DTO - Web Data Object

<select>
	SELECT 	*
	FROM 	테이블명
	WHERE 	컬럼=#{cust_id}
	  AND 	컬럼=#{cust_type}
</select>

가장 많이 사용하며, JSON 데이터와 궁합이 좋은 끝판왕이다.

JSON to Map 혹은 JSON to DTO는 자주 사용하게 될 방식일 것이다. 이를 그대로 이용할 수 있으며, entity로 재정의하여 사용하기에도 편한 방식이다.

 

마이바티스 유용한 문법들

다음은 마이바티스에서 유용하게 사용할 수 있는 함수들을 정리해봤다.

개발하다가 추가적으로 생긴 것들을 꾸준히 업데이트할 예정이다.

문자열 관련

- 문자열(String) 비교 방법

<if test='str == null && str == "" && str.equal("")'>

 

배열 관련

- 배열(List<String>) 비교 방법

<if test='str == null && str.isEmpty()'>

 

트러블슈팅

- Null 값 사전 정의

Query에서 필요한 변수가 parameterType에 정의된 모델에 없거나 파라미터 값이 Null이라면, 마이바티스 빈 값이 존재한다는 jdbcType...... 으로 나온다. 이 경우, 다음과 같은 방법으로 null 값이 들어와도 수행할 수 있는 동적쿼리문을 작성할 수 있습니다.

<select id="getDoumentList" parameterType="com.test.spring.*DTO" resultType="com.test.spring.*DTO">
    SELECT     *
    FROM    TEST
    WHERE    NAME = #{name, jdbcType=VARCHAR}
</select>

jdbcType=(컬럼타입)을 통하여, 해당 컬럼이 not null일 경우나 파라미터 값이 없어도 쿼리를 정상적으로 수행할 수 있게 됩니다.

 

 

 

Last Updated. 2021. 12. 29.

 

반응형

블로그의 정보

배부른코딩로그

배부른코딩로그

활동하기