본문 바로가기
DB/Mybatis

Mybatis

by bang-geus 2024. 8. 9.

MyBatis를 사용하여 복잡한 SQL 쿼리를 작성할 때, 효율성을 높이기 위해 다양한 전략과 팁을 활용할 수 있습니다. MyBatis는 SQL을 직접 작성할 수 있는 장점이 있지만, 복잡한 쿼리를 효율적으로 작성하고 유지하기 위해서는 몇 가지 중요한 고려사항이 있습니다.

1. 동적 SQL 사용

1.1 <if>, <choose>, <when>, <otherwise> 태그

  • 특징: 조건에 따라 SQL 문을 동적으로 생성할 수 있습니다. 이를 통해 불필요한 쿼리 조건을 제거하고, 상황에 맞는 최적의 SQL을 생성할 수 있습니다.
<select id="findUsers" parameterType="map" resultType="User"> 
	SELECT * FROM Users 
    WHERE 1=1 
    <if test="name != null"> 
    	AND name = #{name} 
    </if>
    <if test="age != null">
    	AND age = #{age} 
    </if> 
 </select>

 

여기서 name이나 age가 null일 경우 해당 조건이 쿼리에 포함되지 않아 효율적인 SQL을 생성할 수 있습니다.

1.2 <foreach> 태그

  • 특징: 리스트나 배열의 값을 SQL에 동적으로 삽입할 수 있습니다. IN 절에서 자주 사용되며, 복잡한 데이터 구조를 다룰 때 유용합니다.
<select id="findUsersByIds" parameterType="list" resultType="User">
    SELECT * FROM Users
    WHERE id IN
    <foreach item="id" collection="list" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

여러 ID를 동적으로 생성하여 IN 절에 포함시킬 수 있습니다.

2. SQL 재사용

2.1 <sql> 태그와 <include> 태그

  • 특징: 공통적으로 사용하는 SQL 조각을 재사용할 수 있습니다. 이는 쿼리의 중복을 줄이고, 유지보수를 쉽게 만듭니다.
<sql id="userColumns">
    id, name, age, email
</sql>

<select id="findUserById" parameterType="int" resultType="User">
    SELECT <include refid="userColumns"/> FROM Users WHERE id = #{id}
</select>

<select id="findAllUsers" resultType="User">
    SELECT <include refid="userColumns"/> FROM Users
</select>

userColumns라는 SQL 조각을 정의하여 여러 쿼리에서 재사용할 수 있습니다.