Newer
Older
bremer / src / main / kotlin / dao / handler / LocalDateTimeTypeHandler.kt
yhornisse on 2 Jul 2023 1 KB add project
/*
 * 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
}