package kr.wisestone.owl.domain.support; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedTypes; import java.sql.*; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Calendar; import java.util.GregorianCalendar; @MappedTypes(ZonedDateTime.class) public class ZonedDateTimeTypeHandler extends BaseTypeHandler { @Override public void setNonNullParameter(PreparedStatement ps, int i, ZonedDateTime parameter, JdbcType jdbcType) throws SQLException { ps.setTimestamp( i, Timestamp.from(parameter.toInstant()), GregorianCalendar.from(parameter) ); } @Override public ZonedDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException { Timestamp ts = rs.getTimestamp(columnName, Calendar.getInstance()); if (ts != null) { return ZonedDateTime.ofInstant(ts.toInstant(), ZoneId.systemDefault()); } return null; } @Override public ZonedDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException { Timestamp ts = rs.getTimestamp(columnIndex, Calendar.getInstance()); if (ts != null) { return ZonedDateTime.ofInstant(ts.toInstant(), ZoneId.systemDefault()); } return null; } @Override public ZonedDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { Timestamp ts = cs.getTimestamp(columnIndex, Calendar.getInstance()); if (ts != null) { return ZonedDateTime.ofInstant(ts.toInstant(), ZoneId.systemDefault()); } return null; } }