[Mybatis] 기본 및 유용한 문법 모음
by 배부른코딩로그💡 Spring Legacy에서 많이 연동되는 MyBatis에서 사용할 수 있는 유용한 문법들을 정리해보자!
목표
- Spring과 MyBatis를 연동할 수 있다.
- MyBatis의 기본 문법들을 작성할 수 있다.
- MyBatis에서 자주 사용되는 유용한 문법들을 작성하고 활용할 수 있다.
마이바티스는 XML 문법으로 작성할 수 있으며, DB Query를 작성할 때 아래와 같이 상황에 맞게 사용하면 된다.
마이바티스 기본 문법들
CRUD에 대해서 각각 아래와 같이 편하게 사용이 가능하다. 어떤 명령어가 실행될지를 미리 명시한다고 생각하자.
엘리먼트의 속성값 중 id에는 Mapper Class에 맵핑된 함수명을 기입하며, parameterType과 resultType에는 파라미터로 넣거나 반환받을 타입을 적어주면 된다. 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.
'Spring > Mybatis' 카테고리의 다른 글
[MyBatis] Could not resolve type alias '' (0) | 2023.04.06 |
---|---|
[Mybatis] LOB Type 데이터 처리하기 (0) | 2020.04.02 |
[Mybatis] Log4j 로그찍기 (0) | 2020.03.31 |
[Mybatis] Java Function 불러오기 (0) | 2020.03.27 |
[Mybatis] OGNL(Object Graph Navigation Language) Issue (0) | 2020.03.27 |
블로그의 정보
배부른코딩로그
배부른코딩로그