PostgreSQLの幾何型はデフォルトではサポートされていないので、TypeHandlerCallbackを作成する必要があります。
#ここら辺、なにも考えなくても使えたApache commons DbUtils は今思うと凄いな。
世の中に全然情報がなかったので、忘れないようにメモ。
設定は、sqlMapConfigに追加したTypeHandlerCallbackを追加。
あとは、検索時にparameterMapにてTypeHandlerを指定。
以下のサンプルは、PGpoint、PGbox、PGpolygonを追加した例。
戻りのほうは、別に書かなくてもよいかな?
sqlMapConfig
<typeHandler jdbcType="box" javaType="org.postgresql.geometric.PGbox"
callback="test.ibatis.PGboxTypeHandlerCallback"/>
<typeHandler jdbcType="polygon" javaType="org.postgresql.geometric.PGpolygon"
callback="test.ibatis.PGpolygonTypeHandlerCallback"/>
<typeHandler jdbcType="point" javaType="org.postgresql.geometric.PGpoint"
callback="test.ibatis.PGpointTypeHandlerCallback"/>
sqlMap
<parameterMap id="boundBoxMap" class="hogehoge.BoudingBox">
<parameter property="ここにPGboxを指定" typeHandler="test.PGboxTypeHandlerCallback"/>
</parameterMap>
以下は、TypeHandlerCallback。
PGbox
package test.ibatis;
import java.sql.SQLException;
import org.postgresql.geometric.PGbox;
import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
public class PGboxTypeHandlerCallback implements TypeHandlerCallback {
@Override
public Object getResult(ResultGetter arg0) throws SQLException {
PGbox box = new PGbox(arg0.getString());
return box;
}
@Override
public void setParameter(ParameterSetter setter, Object parameter)
throws SQLException {
PGbox p = (PGbox) parameter;
if (p != null) {
setter.setObject(p);
} else {
setter.setNull(1111);
}
}
@Override
public Object valueOf(String s) {
return s;
}
}
PGpoint
package test.ibatis;
import java.sql.SQLException;
import org.postgresql.geometric.PGpoint;
import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
public class PGpointTypeHandlerCallback implements TypeHandlerCallback {
@Override
public Object getResult(ResultGetter arg0) throws SQLException {
return new PGpoint(arg0.getString());
}
@Override
public void setParameter(ParameterSetter setter, Object parameter)
throws SQLException {
PGpoint p = (PGpoint) parameter;
if (p != null) {
setter.setObject(p);
} else {
setter.setNull(1111);
}
}
@Override
public Object valueOf(String s) {
return s;
}
}
PGpolygon
package tset.ibatis;
import java.sql.SQLException;
import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
import org.postgresql.geometric.PGpolygon;
public class PGpolygonTypeHandlerCallback implements TypeHandlerCallback {
@Override
public Object getResult(ResultGetter arg0) throws SQLException {
PGpolygon pgpolygon = new PGpolygon(arg0.getString());
return pgpolygon;
}
@Override
public void setParameter(ParameterSetter setter, Object parameter)
throws SQLException {
PGpolygon p = (PGpolygon) parameter;
if (p != null) {
setter.setObject(p);
} else {
setter.setNull(1111);
}
}
@Override
public Object valueOf(String s) {
return s;
}
}
0 件のコメント:
コメントを投稿