はじめに
iciqlでPostGISのgeometry型を扱う方法についての覚え書きです。
検証環境
以下のバージョンで検証しています。
・JDK ... 8
・PostgreSQL ... 9.6
・PostGIS ... 2.3.1
・iciql ... 2.1.1
・その他依存ライブラリ
 postgresql-9.4.1211.jar
 postgis-jdbc-2.2.0.jar
DataTypeAdapterの実装
DataTypeAdapterを使います。
http://iciql.com/dta/
package sample.iciql;
import org.postgis.PGgeometry;
import com.iciql.Iciql.DataTypeAdapter;
import com.iciql.Iciql.Mode;
public class PgGeometryAdapter implements DataTypeAdapter<PGgeometry> {
	Mode mode;
	/* (non-Javadoc)
	 * @see com.iciql.Iciql.DataTypeAdapter#getDataType()
	 */
	@Override
	public String getDataType() {
		return "geometry";
	}
	/* (non-Javadoc)
	 * @see com.iciql.Iciql.DataTypeAdapter#getJavaType()
	 */
	@Override
	public Class<PGgeometry> getJavaType() {
		return PGgeometry.class;
	}
	/* (non-Javadoc)
	 * @see com.iciql.Iciql.DataTypeAdapter#setMode(com.iciql.Iciql.Mode)
	 */
	@Override
	public void setMode(Mode mode) {
		this.mode = mode;
	}
	/* (non-Javadoc)
	 * @see com.iciql.Iciql.DataTypeAdapter#serialize(java.lang.Object)
	 */
	@Override
	public Object serialize(PGgeometry value) {
		return value;
	}
	/* (non-Javadoc)
	 * @see com.iciql.Iciql.DataTypeAdapter#deserialize(java.lang.Object)
	 */
	@Override
	public PGgeometry deserialize(Object value) {
		return (PGgeometry)value;
	}
	
	
}
Modelクラスの実装
package sample.iciql;
import java.io.Serializable;
import org.postgis.PGgeometry;
import com.iciql.Iciql.IQColumn;
import com.iciql.Iciql.IQSchema;
import com.iciql.Iciql.IQTable;
import com.iciql.Iciql.TypeAdapter;
@IQSchema("sample")
@IQTable(
        name="sample_table", 
        primaryKey={ "id" })
public class SampleModel implements Serializable {
	private static final long serialVersionUID = 1L;
    @IQColumn(nullable=false)
    public Integer id;
    @IQColumn(nullable=true)
    @TypeAdapter(PgGeometryAdapter.class)
    public PGgeometry geometry;
    public SampleModel() {
    }
}
レコード挿入のサンプル
package sample.iciql;
import org.postgis.PGgeometry;
import com.iciql.Db;
public class IciqlSample {
	
	public static void main(String[] args) throws Exception {
		String url = "jdbc:postgresql://localhost:5432/sample";
		String user = "sample";
		String password = "xxxx";
		try (Db db = Db.open(url, user, password)) {
			SampleModel rec = new SampleModel();
			rec.id = 1;
			rec.geometry = new PGgeometry("POINT(10 11");
			db.insert(rec);
		}
	}
}