我试图在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...
当我在PL / SQL中使用相同的SQL时,它可以返回正确的结果,并以字符串形式返回WKT。我使用的是OJDBC 8,我使用的是OJDBC 6,它们都无法正常使用。任何帮助表示赞赏。
最佳答案
指定的结果列没有名称,因此mybatis不知道应将结果集中的哪个值放入geom
列。
默认情况下,mybatis将列映射到属性(可以选择将下划线名称映射到驼峰大小写,例如STRUCTURE_CODE
-> structureCode
)。但是您的查询没有为dbms_lob.substr(T.GEOM.GET_WKT(),4000)
表达式返回的值指定名称,因此它获得由oracle或jdbc驱动程序生成的名称,而mybatis不知道应将其放在结果对象的某个列中。
修改查询并指定结果名称:
@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);
关于java - 在Mybatis中使用GET_WKT()返回空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55157388/