如何从注释中传递mybatis中的间隔?

时间:2012-11-05 12:59:18

标签: postgresql annotations mybatis

我通过注释使用myBatis从我的服务器获取数据。尝试获取数据 n 天,注释:

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < '#{n} days'")
ArrayList<OrderRecord> getOrderHistory(@Param("n") int n);

返回错误:

  

列索引超出范围:1,列数:0。错误   查询数据库。原因:org.postgresql.util.PSQLException:   列索引超出范围:1,列数:0。

此外,

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < #{n}")
ArrayList<OrderRecord> getOrderHistory(@Param("n") String n);
当n类似于“5天”时,

产生类似的错误。

预期的数据类型是什么?

我正在使用PostgreSQL。

2 个答案:

答案 0 :(得分:3)

Mybatis期待一个interval参数,不能自动将整数或String强制转换为它。

需要传递 PGInterval 类型的对象。

PGInterval pginterval = new PGInterval("5 days");

并且注释必须是:

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < #{n}")
ArrayList<OrderRecord> getOrderHistory(@Param("n") PGInterval n);

答案 1 :(得分:2)

this link,您还可以将值转换为SQL中的间隔。例如,这就是我在我的应用程序中使用的内容:now() + CAST(#{my_interval} AS INTERVAL)

其中&#39; my_interval&#39;是第5天&#39;字符串。