Mybatisで日時を扱う方法
MyBatisで日時を扱う方法
MyBatisで日時を扱う際には、Javaのjava.util.Date、java.sql.Date、java.sql.Timestamp、java.time.LocalDateTimeなどを使用できます。
データベースのカラムに適した型を選択し、マッピングすることで、日時データを正確に扱うことができます。
1. データベースとマッピングの設定
例えば、test_eventというテーブルがあり、event_dateという日時を保持するカラムがあるとします。
CREATE TABLE test_event ( id INT PRIMARY KEY, event_date TIMESTAMP );
2. Javaのクラス定義
Java側では、testEventクラスにLocalDateTimeを使用してeventDateフィールドを定義します。
package com.example.model; import java.time.LocalDateTime; public class testEvent { private int id; private LocalDateTime eventDate; // getters and setters public int getId() { return id; } public void setId(int id) { this.id = id; } public LocalDateTime getEventDate() { return eventDate; } public void setEventDate(LocalDateTime eventDate) { this.eventDate = eventDate; } }
3. MyBatisのマッパーXML
MyBatisのマッパーXMLで、testEventオブジェクトとtest_eventテーブルのマッピングを行います。
selectを使って、データベースから日時を取得し、insertを使ってデータを保存する例を示します。
<mapper namespace="com.example.mapper.testEventMapper"> <select id="selectEventById" resultType="com.example.model.testEvent"> SELECT id, event_date AS eventDate FROM test_event WHERE id = #{id} </select> <insert id="insertEvent"> INSERT INTO test_event (id, event_date) VALUES (#{id}, #{eventDate}) </insert> </mapper>
4. マッパーインターフェース
次に、MyBatisのマッパーインターフェースを作成します。
package com.example.mapper; import com.example.model.testEvent; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; public interface testEventMapper { @Select("SELECT id, event_date AS eventDate FROM test_event WHERE id = #{id}") testEvent selectEventById(int id); @Insert("INSERT INTO test_event (id, event_date) VALUES (#{id}, #{eventDate})") void insertEvent(testEvent event); }
5. 使用例
以下のように、testEventMapperを使用してデータベースに日時データを挿入したり、取得したりできます。
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import java.time.LocalDateTime; public class Main { public static void main(String[] args) { SqlSessionFactory sqlSessionFactory = ... // SqlSessionFactoryの初期化 try (SqlSession session = sqlSessionFactory.openSession()) { testEventMapper mapper = session.getMapper(testEventMapper.class); // データの挿入 testEvent newEvent = new testEvent(); newEvent.setId(1); newEvent.setEventDate(LocalDateTime.now()); mapper.insertEvent(newEvent); // データの取得 testEvent event = mapper.selectEventById(1); System.out.println("Event Date: " + event.getEventDate()); } } }
この例では、LocalDateTimeを使用して日時を管理していますが、java.util.Dateやjava.sql.Timestampなど、他の型も使用できます。
MyBatisはこれらの型を自動的に変換します。