比较时间戳与mybatis,postgresql

问题描述:

我使用mybatis来查询我的postgres数据库,我的问题是时间戳之间的比较,我认为它不能正常工作,因为它不会重新运行所需的结果,即使它没有投掷任何异常。 这里是我的代码比较时间戳与mybatis,postgresql

<select id="select_count" parameterType="map" resultType="map"> 
     select count(*) as count, TO_CHAR(created_on, #{xaxis}) as xaxis,state 
     from my_table 
     where 1 = 1 
     <if test="fromdate != null"> and created_on &gt;= #{fromdate} </if> 
     <if test="todate != null"> and created_on &lt;= #{todate} </if> 
     <if test="state != null"> and state = #{state} </if> 
     GROUP BY xaxis, state 
</select> 

,这里是我的Java代码

public List<Map<String, Object>> getStatesCount(Date fromDate, 
       Date toDate, String state, String xAxis) { 
     Map<String, Object> params = new HashMap<String, Object>(); 
     params.put("fromdate", fromDate); 
     params.put("todate", toDate); 
     params.put("state", state); 
     params.put("xaxis", "yyyy-mm-dd"); 
     List<Map<String, Object>> sqlResults = (List<Map<String, Object>>) template.selectList(SELECT_COUNT, params); 
     return sqlResults; 
    } 

,这是一个用于创建代码MY_TABLE

CREATE SEQUENCE my_table_seq START WITH 1 INCREMENT BY 1; 
CREATE TABLE my_table 
(
    id INT8 NOT NULL DEFAULT NEXTVAL('my_table_seq'), 
    state VARCHAR(20), 
    created_on TIMESTAMP WITH TIME ZONE, 
    PRIMARY KEY (id), 
); 

我知道,我的表中有许多行'created_on'道具设置为,比方说,今天的日期。但是,当我通过我的两个日期参数或甚至其中一个,选择查询不会返回任何数据。

那么如何正确查询时间戳和java.util.Date

+0

代码:中日期参数的拼写不正确,现在一切正常,thx – 2013-03-26 09:02:28

+0

MyBatis生成什么查询? (在MyBatis中启用SQL日志记录或在'postgresql.conf'中启用'log_statement ='all'') – 2013-03-26 09:02:30

+0

如果您认为这个问题可能对其他人有用,请发布您自己的答案,并在Stack Overflow上的新用户定时器让你;我会高兴。 – 2013-03-26 09:03:16

我发布了正确的答案。

这里是我的代码

<select id="select_count" parameterType="map" resultType="map"> 
    select count(*) as count, TO_CHAR(created_on, #{xaxis}) as xaxis,state 
    from my_table 
    where 1 = 1 
    <if test="fromdate != null"> and created_on &gt;= #{fromdate} </if> 
    <if test="todate != null"> and created_on &lt;= #{todate} </if> 
    <if test="state != null"> and state = #{state} </if> 
    GROUP BY xaxis, state 
</select> 

,这里是我的Java代码

public List<Map<String, Object>> getStatesCount(Date fromDate, 
      Date toDate, String state, String xAxis) { 
    Map<String, Object> params = new HashMap<String, Object>(); 
    params.put("fromdate", fromDate); 
    params.put("todate", toDate); 
    params.put("state", state); 
    params.put("xaxis", "yyyy-mm-dd"); 
    List<Map<String, Object>> sqlResults = (List<Map<String, Object>>) template.selectList(SELECT_COUNT, params); 
    return sqlResults; 
} 

,这是我想我找到了问题的产生MY_TABLE

CREATE SEQUENCE my_table_seq START WITH 1 INCREMENT BY 1; 
CREATE TABLE my_table 
(
    id INT8 NOT NULL DEFAULT NEXTVAL('my_table_seq'), 
    state VARCHAR(20), 
    created_on TIMESTAMP WITH TIME ZONE, 
    PRIMARY KEY (id), 
);