使用Oracle函数时如何在mybatis中将参数传递为CLOB?

时间:2019-05-29 10:03:56

标签: java oracle gis mybatis oracle-spatial

我正在尝试将冗长的WKT(有关地理信息的长字符串)放入oracle空间函数SDO_GEOMETRY中,以使用mybatis将WKT转换为oracle几何类型。数据库中没有存储WKT的列,它仅用作所述函数中的参数。该项目的Java类型为String,当我尝试将其放入其中时会返回错误,提示String太长。这表明该字符串没有被转换为CLOB。我该怎么办?

我尝试在mybatis .xml文件的开头使用它:

<resultMap type="example.Building" id="BaseResultMap">
        <result property="geom" column="geom" jdbcType="CLOB"
                javaType = "java.lang.String"  typeHandler ="example.Utils.OracleClobTypeHandler"/>
    </resultMap>

我已经建立了一个OracleClobTypeHandler类。

我也尝试使用#{wkt,jdbcType=CLOB},但是没有成功。

编辑:这是SetParameter中的OracleClobTypeHandler方法:

    @Override
    public void setParameter(PreparedStatement arg0, int arg1, Object arg2, JdbcType arg3) throws SQLException {
        CLOB clob = CLOB.getEmptyCLOB();
        clob.setString(1, (String) arg2);
        arg0.setClob(arg1, clob);
    }

1 个答案:

答案 0 :(得分:0)

<resultMap />无关紧要,因为在将查询结果映射到Java对象时使用。
尝试在参数参考中指定typeHandler。例如
#{wkt,typeHandler=example.Utils.OracleClobTypeHandler}

请注意,如果类型处理程序是Utils的内部类,则必须将其引用为example.Utils$OracleClobTypeHandler