我在项目中分别有使用mybatis和JDBC查询,mybatis查到的数据一切正常,但是JDBC查到的数据,日期后面总是会多.0,排查后发现是JDBC会将日期类型的数据自动转换为timestamp时间戳,但datetime类型精度只到秒,JDBC会将精度提升到毫秒级,并给予默认值0,于是就多了.0。
一般的解决办法是直接使用mysql的内置函数进行格式转换,但是我们项目的字段是由数据库配置,字段关联着其他配置的匹配,不能加函数。
我的解决是在数据库标记日期类型字段,对这一类字段做过滤,格式化。
import cn.venton.entity.DatasetList;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
public class CleanStringUtil {
public static List<Map<String, Object>> cleanString(List<Map<String, Object>> list, DatasetList datasetList) {
if (datasetList.getTimeTypeColumn() == null) {
return list;
}
String[] timeTypeColumn = datasetList.getTimeTypeColumn().split(",");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (Map<String, Object> map : list) {
for (String s : timeTypeColumn) {
if (map.get(s) != null) {
map.put(s, df.format(map.get(s)));
}
}
}
return list;
}
}
效果