타입핸들러 7

to_char(trunc(months_between(trunc(sysdate , 'DAY') , TO_DATE(birth , 'YYYYMMDD' ) ) / 12 )) AS YEARS 에 대한 package com.example.typehandler; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.*; import java.time.LocalDate; import java.time.Period; import java.time.format.DateTimeFormatter; public class AgeTypeHandler extends BaseTypeHandler { private static final DateTimeFormatter BIRTH_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd"); @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { return calculateAge(rs.getString(columnName)); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return calculateAge(rs.getString(columnIndex)); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return calculateAge(cs.getString(columnIndex)); } private String calculateAge(String birth) { if (birth == null || birth.length() != 8) { return null; } LocalDate birthDate = LocalDate.parse(birth, BIRTH_FORMAT); // Oracle TRUNC(MONTHS_BETWEEN(...)/12) 와 거의 동일 int years = Period.between(birthDate, LocalDate.now()).getYears(); return String.valueOf(years); } }

댓글

이 블로그의 인기 게시물

food eff privacy

판다 스픽 , 개인정보 처리방침 , Panda Speak Privacy Term

판다 수학 개인정보 처리방침 , Privacy , Panda Math