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で複数の条件を組み合わせたクエリを実行することができます。