package jnpf.dmsDatabase; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.UUID; @MappedTypes(UUID.class) @MappedJdbcTypes(value = JdbcType.OTHER, includeNullJdbcType = true) public class DmsUuidTypeHandler extends BaseTypeHandler { @Override public void setNonNullParameter(PreparedStatement statement, int index, UUID value, JdbcType jdbcType) throws SQLException { statement.setObject(index, value, Types.OTHER); } @Override public UUID getNullableResult(ResultSet resultSet, String columnName) throws SQLException { return toUuid(resultSet.getObject(columnName)); } @Override public UUID getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException { return toUuid(resultSet.getObject(columnIndex)); } @Override public UUID getNullableResult(CallableStatement statement, int columnIndex) throws SQLException { return toUuid(statement.getObject(columnIndex)); } private UUID toUuid(Object value) throws SQLException { if (value == null) { return null; } if (value instanceof UUID) { return (UUID) value; } try { return UUID.fromString(value.toString()); } catch (IllegalArgumentException exception) { throw new SQLException("Invalid PostgreSQL UUID value: " + value, exception); } } }