您的位置:首页 > 数据库 > Oracle

关于Oracle字段类型Date使用mybatis generator自动生成工具出现的查询日期只精确到年月日问题

2016-03-08 12:39 1071 查看
    工作需要使用mybatis generator,另外Oracle和mybatis也没有做过深入的了解,只是能用会写业务代码,不报错就可以了。

废话,割------------------------------------------------------------------------------------------------------------------------------------

    在使用Oracle+mybatis做sql查询时,发现查询出来的结果只精确到年月日,因为mybatis的orm映射由mybatis generator来做的,所以自己以为在哪个地方业务代码转换是出了错,Debug的时候才发现出错的是sql查询。

    其中一点在网上找到了(http://www.soso.io/article/72293.html),文章中提到:


mybatis jdbcType: DATE ,TIMESTAMP 区别:

1. mybatis中 jdbcType 时间类型

当jdbcType = DATE 时, 只传入了 年月日

jdbcType = TIMESTAMP , 年月日+ 时分秒

2. jdbcType 是否必须:

使用时, 没有加jdbcType 正常,

加上jdbcType原因(网络): 当传入字段值为null,时,需要加入. 否则报错.



     于是修改了,sqlMap中的所有jdbcType=DATE 为TIMESTAMP,保存编译运行结果还是精确到年月日。

    翻开旧项目需要差异,发现因为Oracle中的字段类型是Date的缘故,mybatis generator自动生成了几个个addCriterionForJDBCDate方法,而所有对应Date类型的字段,都使用了该方法,代码如下:

    

protected void addCriterionForJDBCDate(String condition, Date value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
addCriterion(condition, new java.sql.Date(value.getTime()), property);
}

protected void addCriterionForJDBCDate(String condition, List<Date> values, String property) {
if (values == null || values.size() == 0) {
throw new RuntimeException("Value list for " + property + " cannot be null or empty");
}
List<java.sql.Date> dateList = new ArrayList<java.sql.Date>();
Iterator<Date> iter = values.iterator();
while (iter.hasNext()) {
dateList.add(new java.sql.Date(iter.next().getTime()));
}
addCriterion(condition, dateList, property);
}

protected void addCriterionForJDBCDate(String condition, Date value1, Date value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
addCriterion(condition, new java.sql.Date(value1.getTime()), new java.sql.Date(value2.getTime()), property);
}


其中Java.sql.Date(value1.getTime())结果是精确到年月日,至于为什么,后续有时间补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: