【问题标题】:MyBatis + PostgreSQL/PostGISMyBatis + PostgreSQL/PostGIS
【发布时间】:2015-07-08 02:44:16
【问题描述】:

我正在尝试使用 MyBatis 作为对象映射器对 PostgreSQL 数据库中的数据库行执行径向搜索,以返回 Java 对象。连接和所有查询都按预期工作,径向搜索除外。我已经在数据库中安装了 PostGIS。查询在 XML 配置文件中设置。麻烦的查询是……

select * from "Events"
    where (ST_DWithin("CreationLocation"::geography, ST_SetSRID(ST_Point(#{longitude}, #{latitude}), 4326)::geography, #{radius})
    and "Tag" = 0 and "EventTime" >= now())

如果我使用 PGAdmin 直接连接到数据库并使用传递给映射器的相同参数运行查询,我会得到多个(正确的)结果。当映射器运行查询时,我没有得到任何结果。我相信这与 MyBatis 准备好的语句有关,但我不知道更多。

【问题讨论】:

  • 当您从 MyBatis 发出查询时,PostgreSQL 日志文件显示什么?
  • 准备好的语句 MyBatis 最终使用应该最终类似于原始 JDBC 的工作方式...... 的实际查询是什么MyBatis 正在创建?您可以通过 DEBUG 级别启用日志记录,mybatis.github.io/mybatis-3/logging.html 的更多详细信息(通过 Postgres 进行日志记录,正如 Patrick 提到的,也会从不同的角度揭示一些信息) .

标签: java postgresql postgis mybatis


【解决方案1】:

我最终通过将 ST_SetSRID(...) 更改为

来解决问题
ST_GeogFromText('SRID=4326;POINT(' || #{longitude} || ' ' || #{latitude} || ')')

我的假设(虽然我还没有确认)是对象映射器不知道如何处理双嵌套参数,它只是被传递'?而不是经纬度的实际值。

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多