Mybatisでtimestampを使用した実装

Mybatisでtimestampを使用した実装

MyBatisでtimestampを使用するには、データベースのテーブルにtimestamp型のカラムを追加し、MyBatisのマッピングファイルやアノテーションを使ってJavaのDate型やLocalDateTime型とマッピングする方法があります。
以下は、その具体的な手順です。

1. テーブルにtimestamp型カラムを追加

まず、MySQLのテーブルにtimestamp型のカラムを追加します。

CREATE TABLE my_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
2. エンティティクラスを作成

次に、Javaのエンティティクラスを作成し、timestampカラムに対応するフィールドを追加します。

import java.time.LocalDateTime;

public class MyEntity {
    private int id;
    private String name;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;

    // getters and setters
}
3. マッパーインターフェースを作成

MyBatisのマッパーインターフェースを作成し、クエリを定義します。

import org.apache.ibatis.annotations.*;

import java.util.List;

public interface MyMapper {
    @Select("SELECT * FROM my_table WHERE id = #{id}")
    MyEntity getById(int id);

    @Insert("INSERT INTO my_table(name, created_at, updated_at) VALUES(#{name}, #{createdAt}, #{updatedAt})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insert(MyEntity entity);

    @Update("UPDATE my_table SET name = #{name}, updated_at = #{updatedAt} WHERE id = #{id}")
    void update(MyEntity entity);

    @Delete("DELETE FROM my_table WHERE id = #{id}")
    void delete(int id);

    @Select("SELECT * FROM my_table")
    List<MyEntity> getAll();
}
4. MyBatis設定ファイル(XML)の使用(オプション)

XMLマッピングファイルを使用する場合の例です。

<mapper namespace="com.example.MyMapper">
    <resultMap id="MyEntityResultMap" type="com.example.MyEntity">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="createdAt" column="created_at"/>
        <result property="updatedAt" column="updated_at"/>
    </resultMap>

    <select id="getById" resultMap="MyEntityResultMap">
        SELECT * FROM my_table WHERE id = #{id}
    </select>

    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO my_table (name, created_at, updated_at)
        VALUES (#{name}, #{createdAt}, #{updatedAt})
    </insert>

    <update id="update">
        UPDATE my_table
        SET name = #{name}, updated_at = #{updatedAt}
        WHERE id = #{id}
    </update>

    <delete id="delete">
        DELETE FROM my_table WHERE id = #{id}
    </delete>

    <select id="getAll" resultMap="MyEntityResultMap">
        SELECT * FROM my_table
    </select>
</mapper>
5. MyBatis設定ファイルの設定

MyBatisの設定ファイルでJavaのDate型やLocalDateTime型を適切にマッピングするために、設定を追加します。

<configuration>
    <typeHandlers>
        <typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" javaType="java.time.LocalDateTime"/>
    </typeHandlers>
</configuration>

この設定により、MyBatisはデータベースのtimestamp型カラムをJavaのLocalDateTime型に自動的にマッピングします。

これで、MyBatisを使用してtimestampを扱うことができます。