본문 바로가기
Dev/DataBase

『DataBase』 MyBatis 문법

by 세대교체 2024. 11. 1.

MyBatis 문법

 

SQL 매핑 파일 (XML)

MyBatis는 SQL 매핑 파일을 사용하여 SQL 쿼리와 자바 메서드를 매핑한다.

이 파일은 <mapper> 요소로 시작하고,

<select>, <insert>, <update>, <delete> 등의 요소를 사용하여 각각의 SQL 쿼리를 정의한다.

 

 

#{}

MyBatis에서는 SQL 쿼리에 매개 변수를 바인딩하여 동적인 쿼리를 생성할 수 있다.

#{} 형식을 사용하여 매개 변수를 바인딩할 수 있다.

예를 들어, WHERE id = #{userId}와 같은 형식으로 매개 변수를 사용할 수 있다.

 

 

resultMap

SQL 쿼리의 결과를 자바 객체에 매핑할 수 있다.

<resultMap> 요소를 사용하여 결과 매핑을 정의하고, resultType 속성을 사용하여 자바 객체의 클래스를 지정할 수 있다. <result> 요소를 사용하여 각 열을 자바 객체의 속성에 매핑한다.

 

 

MyBatis는 동적인 SQL 쿼리를 작성할 수 있는 다양한 기능을 제공한다.

<if>, <choose>, <when>, <otherwise>, <trim>, <foreach> 등의 요소를 사용하여 동적인 SQL을 작성할 수 있다.

<if>

getUserList라는 SQL 매핑 ID를 가진 쿼리는 users 테이블에서 조건에 따라 필터링된 결과를 가져온다.

<if> 요소를 사용하여 name과 age의 값에 따라 WHERE 절의 조건을 동적으로 생성한다.

 

 

<choose>, <when>, <otherwise>

getUserList라는 SQL 매핑 ID를 가진 쿼리는 users 테이블에서 여러 조건 중 하나를 선택하여 필터링된 결과를 가져온다. 

<choose> 요소 내에서 <when> 요소를 사용하여 조건을 지정하고 조건이 충족이 되면 쿼리에 포함,

<otherwise> 요소를 사용하여 어떤 조건도 충족되지 않을 경우의 포함한다.

 

 

<foreach>

<foreach> 요소를 사용하여 반복문을 작성할 수 있다.

이를 사용하여 컬렉션의 요소들을 반복하면서 동적인 SQL을 생성할 수 있다.

 

<foreach> : insertUsers라는 SQL 매핑 ID를 가진 쿼리는 주어진 Map에 있는 키-값 쌍을 사용하여 사용자를 삽입한다. <foreach> 요소를 사용하여 userMap이라는 Map을 반복하면서 각 키와 값의 쌍을 삽입 쿼리에 포함시킨다.

 

 

<trim>

<trim> 요소를 사용하여 동적 SQL의 시작 또는 끝에서 불필요한 공백이나 기타 문자를 제거할 수 있다.

 

<trim> : <trim> 요소를 사용하여 <if> 요소 내의 조건이 충족될 때만 WHERE 절을 동적으로 생성하고, AND 또는 OR로 시작하는 조건문을 제거한다.

 

 

동적 페이지네이션

Mybatis로 동적 페이지네이션을 구현하는 방법을 전체적으로 살펴보자.

 

1. Mapper XML 설정 (UserMapper.xml)

 

2. Mapper 인터페이스 설정 (UserMapper.java)

 

3. 서비스 레이어 구현 (UserService.java)

 

4. 컨트롤러 구현 (UserController.java)

 

Tip

ROW_NUMBER() OVER (ORDER BY u.id) AS rn
  • ROW_NUMBER(): 결과 집합의 각 행에 대해 고유한 순번을 부여.
  • OVER: ROW_NUMBER() 함수가 적용되는 범위와 정렬 기준을 지정.
  • AS rn: 결과로 생성된 순번 열을 rn이라는 별칭(alias)으로 지정.