在 Mybatis 中使用 GET_WKT() returns 空值
Using GET_WKT() in Mybatis returns null value
我试图在 Springboot 中使用 Mybatis 从 Oracle 数据库获取空间数据,当我使用函数 GET_WKT()
时,returned 值为 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 时,它可以 return 将 WKT returned 作为字符串得到正确的结果。我使用的是 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);
我试图在 Springboot 中使用 Mybatis 从 Oracle 数据库获取空间数据,当我使用函数 GET_WKT()
时,returned 值为 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 时,它可以 return 将 WKT returned 作为字符串得到正确的结果。我使用的是 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);