Mybatisでソートをかける

Mybatisでソートをかける

MyBatisでのソートは、データベースから取得するデータを特定の順序で並べるために使用されます。
ソートを実装する際には、SQLクエリにORDER BY句を追加することが一般的です。
以下に、test_tableというテーブルを使ったMyBatisのソートの具体例を示します。

1. ソートの基本

MyBatisでは、ORDER BY句を使ってデータの並び順を指定します。
例えば、test_tableからデータを取得する際に、created_atカラムで降順にソートしたい場合、次のようなSQL文をselectタグ内に記述します。

<select id="selectRecords" resultType="TestRecord">
    SELECT * FROM test_table
    ORDER BY created_at DESC
</select>

ここでは、selectタグを使って、test_tableからすべてのカラムを取得し、created_atカラムの値を基に降順(DESC)でソートしています。
resultType属性には、マッピングするクラスであるTestRecordを指定します。

2. 動的なソート条件

ソートの条件が動的に変わる場合、MyBatisではifタグやchooseタグを使用して条件を制御できます。
以下の例では、ソート順をパラメータとして受け取り、orderByパラメータによってソート順を変更します。

<select id="selectRecordsWithSort" parameterType="map" resultType="TestRecord">
    SELECT * FROM test_table
    <where>
        <if test="sortBy != null">
            ORDER BY
            <choose>
                <when test="sortBy == 'name'">name</when>
                <when test="sortBy == 'createdAt'">created_at</when>
                <otherwise>created_at</otherwise>
            </choose>
            <if test="sortOrder != null">
                <if test="sortOrder == 'desc'">DESC</if>
                <if test="sortOrder == 'asc'">ASC</if>
            </if>
        </if>
    </where>
</select>

この例では、parameterType属性にmapを指定し、sortByおよびsortOrderパラメータによってソート条件を決定します。
chooseタグは複数の選択肢の中から1つを選び、ifタグを使ってソートの昇順または降順を決定します。

3. 複数カラムでのソート

複数のカラムでソートする場合も、ORDER BY句を使って複数のカラムを指定できます。
例えば、test_tableをnameカラムで昇順、created_atカラムで降順にソートする場合は次のように記述します。

<select id="selectRecordsMultiSort" resultType="TestRecord">
    SELECT * FROM test_table
    ORDER BY name ASC, created_at DESC
</select>

ここでは、nameカラムで昇順、created_atカラムで降順にソートするため、ORDER BY句で複数のカラムを指定しています。
ソート順序はカンマで区切って指定します。

これらの例では、MyBatisでのソートの基本的な使い方と、動的なソート条件、複数カラムでのソート方法を示しました。
必要に応じて、ソートの条件や順序を動的に変更することで、柔軟なデータ取得が可能になります。