关于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类型的字段,都使用了该方法,代码如下:
其中Java.sql.Date(value1.getTime())结果是精确到年月日,至于为什么,后续有时间补充。
废话,割------------------------------------------------------------------------------------------------------------------------------------
在使用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())结果是精确到年月日,至于为什么,后续有时间补充。
相关文章推荐
- oracle delete t1;drop table t1;drop table t1 purge
- oracle中把多行记录合并为一行
- oracle表分区详解
- OracleDBConsole 启动出错 特定服务错误代码 2
- Oracle入门
- oracle之 any、all 解析
- Oracle数据库、实例、用户、表空间、角色基本概念和关系
- oracle数组 (转)
- nginx整合php+lua+oracle环境搭建
- oracle 10g 用dbms_xmlgen将数据表转成xml格式
- Oracle 关于WKT构造SDO_GEOMETRY的问题。
- 使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)
- arcgis 10.1 导入数据到oracle 发布地图服务
- Oracle 空间查询, 数据类型为 sdo_geometry
- 64位机 VS2012 Oracle ORA-06413 连接未打开
- Oracle_spatial的常见错误与注意事项
- shp转oracle spatial
- Oracle Spatial中SDO_Geometry说明
- Oracle_spatial的函数介绍
- Oracle_spatial的空间操作符介绍