ibatisでPostgreSQLの幾何型を

2009/07/31

自分メモ

ibatisでPostgreSQLの幾何型を取り扱うときのメモ。

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;
}

}

楽天市場でGO

マウスコンピューター期間限定セール

過去の記事はこちら

QooQ