Mybatis映射Oracle Spatial和Jgeometry

引子

最近要用到Oracle Spatial中SDO_Geometry数据结构,因为SDO_Geometry可以存储点、线、面等几何图形,关于SDO_Geometry的介绍网上很多,此处不再赘述。本文要介绍的是在java中实现对Oracle中的SDO_Geometry类型的字段的读写。

创建Oracle Spatial空间索引

创建Oracle的空间索引的例子网上很多,只列出步骤,不解释具体的原理。
1.创建表

CREATE TABLE GEOMETRY_TABLE
(
  ID              NUMBER,
  NAME            VARCHAR2(30),
  GEOMETRY        SDO_GEOMETRY,
)

2.创建相应的空间元数据
元数据视图USER_SDO_GEOM_METADATA,可以select查看。

INSERT INTO USER_SDO_GEOM_METADATA VALUES('GEOMETRY_TABLE', 'GEOMETRY', MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('longitude', -180, 180, 0.005), MDSYS.SDO_DIM_ELEMENT('latitude', -90, 90, 0.005)), 8307);

USER_SDO_GEOM_METADATA视图包含的字段有TABLE_NAME,COLUMN_NAME,DIMINFO,SRID.对于SRID我们通常使用国际标准的Longitude/Latitude(8307)。使用的有很多标准,如果有兴趣的话可以去oracle的MDSYS用户下去查看,有个专门记录SRID值的表。

3.创建空间索引

CREATE INDEX GEO_INDEX ON GEOMETRY_TABLE(GEOMETRY) INDEXTYPE IS MDSYS.SPATIAL_INDEX;

Mybatis映射JGeometry和SDO_GEOMETRY

空间对象以SDO_GEOMETRY类型存储在数据库表中。要在Java中对其进行处理,必须首先使用JDBC从数据库中读取它们,然后把它们映射为Java类。Oracle Spatial提供了API接口。Oracle Spatial的Java API的jar包在Oracle安装目录($ORACLE_HOME/md/jlib )下(sdoapi.jar和sdoutl.jar),将其导入java的classpath。主要用的两个类JGeometry和J3D_Geometry,一个是二维的,一个是三维的。

在使用java读写数据库中包含SDO_GEOMETRY类型的表时可以使用JDBC来做,但是由于JDBC的缺点,所以采用Mybatis来做持久层和数据的映射。由于Mybatis不包含将JGeometry和SDO_GEOMETRY对应的TypeHandler,所以要建立自己的TypeHandler。

建立SdoGeometryTypeHandler
建立自己的Typehandler可以通过继承原始接口TypeHandler或者 BaseTypeHandler抽象类,两个差不多,我用的时通过继承原始接口TypeHandler。
在Mybatis中要实现自己的TypeHandler就需要实现Mybatis为我们提供的TypeHandler接口。在TypeHandler中定义了四个方法,下面解释这四个方法的作用:
Java代码

public interface TypeHandler<T> {  

    /** 
     * 用于定义在Mybatis设置参数时该如何把Java类型的参数转换为对应的数据库类型 
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值