Mybatisでdatetime型を範囲指定する方法

Mybatisでdatetime型を範囲指定する方法

MyBatisでdatetime型を範囲指定してクエリを実行するには、SQLのBETWEEN句を使用します。
以下にその具体的な方法を示します。

まず、マッパーインターフェースを定義します。
例えば、EventMapperというインターフェースがあるとします。

public interface EventMapper {
    List<Event> selectEventsWithinRange(@Param("startDateTime") LocalDateTime startDateTime, @Param("endDateTime") LocalDateTime endDateTime);
}

次に、対応するXMLマッパーファイルを作成します。
例えば、EventMapper.xmlというファイルがあるとします。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.EventMapper">

    <select id="selectEventsWithinRange" resultType="com.example.model.Event">
        SELECT *
        FROM events
        WHERE event_time BETWEEN #{startDateTime} AND #{endDateTime}
    </select>

</mapper>

EventMapperインターフェースのメソッドselectEventsWithinRangeは、2つのLocalDateTime引数(startDateTimeとendDateTime)を受け取り、それらを使ってeventsテーブルのevent_timeカラムを範囲指定してデータを取得します。

呼び出し側のコードは次のようになります:

@Autowired
private EventMapper eventMapper;

public List<Event> getEventsWithinRange(LocalDateTime start, LocalDateTime end) {
    return eventMapper.selectEventsWithinRange(start, end);
}

この方法で、datetime型を範囲指定してデータを取得することができます。
範囲指定の部分はSQLのBETWEEN句を利用することで実現しています。

もし、追加の条件が必要であれば、同様の方法でクエリに追加することができます。
例えば、特定のユーザーIDに基づいてイベントを取得する場合は、次のようにします:

public interface EventMapper {
    List<Event> selectEventsWithinRangeAndUser(@Param("startDateTime") LocalDateTime startDateTime, @Param("endDateTime") LocalDateTime endDateTime, @Param("userId") int userId);
}
<select id="selectEventsWithinRangeAndUser" resultType="com.example.model.Event">
    SELECT *
    FROM events
    WHERE event_time BETWEEN #{startDateTime} AND #{endDateTime}
      AND user_id = #{userId}
</select>

このようにして、MyBatisで複数の条件を組み合わせたクエリを実行することができます。