/* * Copyright (c) 2023. yo-saito. All Rights Reserved. */ package net.piedpiper.bremer.dao.handler import org.apache.ibatis.type.BaseTypeHandler import org.apache.ibatis.type.JdbcType import java.sql.CallableStatement import java.sql.PreparedStatement import java.sql.ResultSet import java.time.LocalDateTime import java.time.ZoneOffset class LocalDateTimeTypeHandler : BaseTypeHandler<LocalDateTime>() { private val jst = ZoneOffset.ofHours(9) override fun setNonNullParameter( ps: PreparedStatement?, i: Int, parameter: LocalDateTime?, jdbcType: JdbcType? ) { ps?.setLong( i, if (LocalDateTime.MIN.isEqual(parameter)) 0L else parameter?.toEpochSecond(jst) ?: 0L ) } override fun getNullableResult(rs: ResultSet?, columnName: String?): LocalDateTime = rs?.getLong(columnName)?.let { LocalDateTime.ofEpochSecond(it, 0, jst) } ?: LocalDateTime.MIN override fun getNullableResult(rs: ResultSet?, columnIndex: Int): LocalDateTime = rs?.getLong(columnIndex)?.let { LocalDateTime.ofEpochSecond(it, 0, jst) } ?: LocalDateTime.MIN override fun getNullableResult(cs: CallableStatement?, columnIndex: Int): LocalDateTime = cs?.getLong(columnIndex)?.let { LocalDateTime.ofEpochSecond(it, 0, jst) } ?: LocalDateTime.MIN }