Java 在Mybatis中使用GET_WKT()返回空值

Java 在Mybatis中使用GET_WKT()返回空值,java,spring-boot,mybatis,oracle-spatial,Java,Spring Boot,Mybatis,Oracle Spatial,我试图在Springboot中使用Mybatis从Oracle数据库获取空间数据,当我使用函数get_WKT()时,返回值为null,但不应为null 这是查询的代码: @Select("SELECT T.OBJECT_ID," + "T.STRUCTURE_CODE," + "T.TYPE," + "T.NAME," + "T.LENGTH," + "T.WIDTH," + "T.HEIGHT,"

我试图在Springboot中使用Mybatis从Oracle数据库获取空间数据,当我使用函数
get_WKT()
时,返回值为null,但不应为null

这是查询的代码:

@Select("SELECT T.OBJECT_ID," +
        "T.STRUCTURE_CODE," +
        "T.TYPE," +
        "T.NAME," +
        "T.LENGTH," +
        "T.WIDTH," +
        "T.HEIGHT," +
        "T.WEIGHT," +
        "T.REMARK," +
        "dbms_lob.substr(T.GEOM.GET_WKT(),4000)  " +
        "FROM JZW_BRIDGE_POINT T WHERE T.STRUCTURE_CODE = #{structureCode}")
Bridge getBridgeByStructureCode(@Param("structureCode") String structureCode);
这是用于保存结果的对象:

public class Bridge {
private String objectId;
    private String structureCode;
    private String type;
    private String name;
    private Double length;
    private Double width;
    private Double height;
    private Double weight;
    private String remark;
    private Integer isDelete;
    private String geom;

getters and setters...
@Select("SELECT T.OBJECT_ID," +
        "T.STRUCTURE_CODE," +
        "T.TYPE," +
        "T.NAME," +
        "T.LENGTH," +
        "T.WIDTH," +
        "T.HEIGHT," +
        "T.WEIGHT," +
        "T.REMARK," +
        "dbms_lob.substr(T.GEOM.GET_WKT(),4000) geom " +
        "FROM JZW_BRIDGE_POINT T WHERE T.STRUCTURE_CODE = #{structureCode}")
Bridge getBridgeByStructureCode(@Param("structureCode") String structureCode);

当我在PL/SQL中使用相同的SQL时,它可以返回正确的结果,WKT作为字符串返回。我使用的是OJDBC 8和OJDBC 6,它们都不能像我预期的那样工作。非常感谢您的帮助。

没有指定结果列的名称,因此mybatis不知道结果集中的值应该放在
geom
列中

默认情况下,mybatis将列映射到属性(可以选择将下划线名称映射到驼峰大小写,如
STRUCTURE\u code
->
structureCode
)。但是您的查询没有为
dbms\u lob.substr(T.GEOM.GET\u WKT(),4000)
表达式返回的值指定名称,因此它会获取由oracle或jdbc驱动程序生成的一些名称,mybatis无法知道它应该放在结果对象的某个列中

修改查询并指定结果的名称:

public class Bridge {
private String objectId;
    private String structureCode;
    private String type;
    private String name;
    private Double length;
    private Double width;
    private Double height;
    private Double weight;
    private String remark;
    private Integer isDelete;
    private String geom;

getters and setters...
@Select("SELECT T.OBJECT_ID," +
        "T.STRUCTURE_CODE," +
        "T.TYPE," +
        "T.NAME," +
        "T.LENGTH," +
        "T.WIDTH," +
        "T.HEIGHT," +
        "T.WEIGHT," +
        "T.REMARK," +
        "dbms_lob.substr(T.GEOM.GET_WKT(),4000) geom " +
        "FROM JZW_BRIDGE_POINT T WHERE T.STRUCTURE_CODE = #{structureCode}")
Bridge getBridgeByStructureCode(@Param("structureCode") String structureCode);