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を扱うことができます。