如何在sql mapper中分配datetime类型的值

时间:2013-06-18 13:10:02

标签: java sql mybatis

当使用mybatis时,我有一个关于读取数据的问题,该数据被选择到一个给定的时间间隔。在xml文件中,我写道:

<select id="getRecord" parameterType="java.util.Map" resultType="com.domain.record">
    select METHOD method, TIME_STAMP timeStamp 
    from RECORD 
    where TIME_STAMP BETWEEN #{startTime} AND #{endTime}
</select>     

在另一个文件中,我这样写:

public List<Record> getRecord(String starttime, String endtime) {
    Map<String, String> map = new LinkedHashMap<String, String>();
    String startTime= "\'"+starttime + "\'";
    String endTime= "\'"+endtime + "\'";
    map.put("startTime",startTime);
    map.put("endTime", endTime);
    List<APIServerRecord> listRes=apiServerRecordMapper.getAPIServerRecord(map);
    return listRes;
}

它不起作用。 listRes的大小为零,我确信有很多记录,它不应该为零。我确信xml文件中的其他sql语句是可行的。同时,如果我直接在xml文件中给出时间,如下面的代码,它可以工作:

 <select id="getRecord" parameterType="java.util.Map" resultType="com.domain.record">
      select METHOD method, TIME_STAMP timeStamp 
      from RECORD 
      where TIME_STAMP BETWEEN '2013-06-18 12:11' AND '2013-06-18 12:16'
</select>

你能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:0)

建议转换为MyBatis正确处理的数据类型(处理程序类扩展为org.apache.ibatis.type.TypeHandler)。

如果字符串的格式相同,您可以尝试:

private static DateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm");

public static Timestamp convert(String str) {
    try {
        Date date = dateFormat.parse(str);
        return new Timestamp(date.getTime());
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
}

public List<Record> getRecord(String starttime, String endtime) {
    Map<String, Object> map = new LinkedHashMap<String, Object>();
    map.put("startTime", convert(startTime));
    map.put("endTime", convert(endTime));
    List<APIServerRecord> listRes=apiServerRecordMapper.getAPIServerRecord(map);
    return listRes;
}