Использование GET_WKT () в Mybatis возвращает нулевое значение - PullRequest
0 голосов
/ 14 марта 2019

Я пытался получить пространственные данные из базы данных Oracle с Mybatis в Springboot, когда я использую функцию GET_WKT(), возвращаемое значение равно нулю, но они не должны быть равны нулю.

Это код запроса:

@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...

Когда я использую тот же SQL в PL / SQL, он может вернуть правильный результат с помощью WKTвозвращается в виде строки.Я использую OJDBC 8 и я использовал OJDBC 6, оба они не работают, как я планировал.Любая помощь приветствуется.

1 Ответ

1 голос
/ 14 марта 2019

Не указано имя для результирующего столбца, поэтому 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);
...