package com.ard.system.noflyzone.domain; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; 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; @MappedJdbcTypes(JdbcType.VARCHAR) @MappedTypes(FeatureCollection.class) public class FeatureCollectionTypeHandler extends BaseTypeHandler { private static final ObjectMapper objectMapper = new ObjectMapper(); @Override public void setNonNullParameter(PreparedStatement ps, int i, FeatureCollection parameter, JdbcType jdbcType) throws SQLException { try { ps.setString(i, objectMapper.writeValueAsString(parameter)); } catch (JsonProcessingException e) { throw new SQLException("Failed to convert FeatureCollection to JSON", e); } } @Override public FeatureCollection getNullableResult(ResultSet rs, String columnName) throws SQLException { String json = rs.getString(columnName); if (json != null) { try { return objectMapper.readValue(json, FeatureCollection.class); } catch (JsonProcessingException e) { throw new SQLException("Failed to parse JSON to FeatureCollection", e); } } return null; } @Override public FeatureCollection getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String json = rs.getString(columnIndex); if (json != null) { try { return objectMapper.readValue(json, FeatureCollection.class); } catch (JsonProcessingException e) { throw new SQLException("Failed to parse JSON to FeatureCollection", e); } } return null; } @Override public FeatureCollection getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String json = cs.getString(columnIndex); if (json != null) { try { return objectMapper.readValue(json, FeatureCollection.class); } catch (JsonProcessingException e) { throw new SQLException("Failed to parse JSON to FeatureCollection", e); } } return null; } }