最近遇到两个关于Ibatis 转换date类型的问题,记录一下:
sql_text:
select distinct t.cc from aa t
where t.update_time > :1 and t.update_time < :2
Optimizer Plan:
-----------------------------------------------------------------------------------------------------------
| Operation | Name | Rows | Bytes| Cost | Pstart| Pstop |
------------------------------------------------------------------------------------------------------------
| SELECT STATEMENT | | | | 226780 | | |
| HASH UNIQUE | | 5K| 72K| 226780 | | |
| FILTER | | | | | | |
| TABLE ACCESS FULL |AA | 69K| 949K| 226774 | | |
------------------------------------------------------------------------------------------------------------
开始一看以为是没建索引,但是发现索引是存在的,同时explain plan 发现走的也是正确的执行计划。
怀疑是统计信息的问题,于是重新收集了统计信息,并重新生成了执行计划,但是还是同样的。因为那天通宵了一夜,
头脑比较晕,没明白是怎么回事。
回家后仔细看了一下v$sql_plan ,发现如下信息:
(INTERNAL_FUNCTION("S"."UPDATE_TIME")>=:1 AND INTERNAL_FUNCTION("S"."UPDATE_TIME")<:2
表示oracle对这个字段做了转换后再去比较,于是怀疑应用里的类型不对,开发同事提供了如下sql,虽然他传入配置文件的属性是date型。
但是IbatiS并没有转换成oracle能识别的date型:
select distinct t.cc from aa t
where t.update_time > #startTimeStr# and t.update_time < #endTimeStr#
于是通知开发修改语句:
update_time >= to_date(#startTimeStr#,'yyyy-mm-dd hh24:mi:ss') and update_time < to_date(#endTimeStr#,'yyyy-mm-dd hh24:mi:ss')
相关推荐
### Ibatis调用Oracle存储过程返回自定义类型 在企业级应用开发中,尤其是在金融、保险等业务场景中,往往需要处理复杂的数据结构与逻辑。本文将深入探讨如何使用Ibatis框架来调用Oracle数据库中的存储过程,并实现...
1. **数据类型**:Oracle支持多种数据类型,如`NUMBER`(数值)、`VARCHAR2`(可变长度字符串)、`DATE`(日期时间)、`CLOB`(大对象)等。 2. **索引**:为了提高查询效率,Oracle允许为表的列创建索引。B树索引...
Oracle提供多种数据类型,如CHAR、VARCHAR2、NUMBER、DATE以及LOB(包括BLOB和CLOB)。日期格式可以使用TO_DATE函数转换,例如`to_date('2016-6-1','yyyy-MM-dd')`,或者直接使用DATE'2016-6-1'。 分析函数如RANK()...
在Java 8中,Oracle引入了全新的日期时间API,包括`LocalDate`、`LocalTime`和`LocalDateTime`,这些类提供了更加直观且强大的日期时间处理能力,替代了传统且复杂的`java.sql.Date`、`java.sql.Timestamp`和`java....
9. 金额转换问题:将阿拉伯数字形式的金额转换为中文大写金额,如“1011”转换为“一千零一拾一元整”。这通常需要根据中文数字的规则来设计转换逻辑。 10. Java通信编程与Socket:Java的Socket编程用于实现基于TCP...
<br> <br>AppFramework数据库访问组件针对IBatisNet的种种缺陷提出相应的解决方案,相比之下有如下优势: <br>1、 从扩展基础数据类型入手,解决了空值问题和默认值问题; <br>2、 提供了内置的数据库...
- `TO_DATE`: 将字符串转换为日期类型。 - `DECODE`: 实现类似于 `CASE WHEN` 的逻辑判断。 - `NVL`: 当给定的表达式为 NULL 时,返回指定的替代值。 #### 九、Oracle 存储过程语法 **知识点解析:** 存储过程是一...
<br> <br>AppFramework数据库访问组件针对IBatisNet的种种缺陷提出相应的解决方案,相比之下有如下优势: <br>1、 从扩展基础数据类型入手,解决了空值问题和默认值问题; <br>2、 提供了内置的数据库...
时间类型转换:在Java中,处理时间类型通常会用到Date、Calendar、LocalDate等类,并且需要进行相应的类型转换。 阶乘:一个正整数的阶乘是所有小于及等于该数的正整数的积。 UE和UI的区别:UE是指用户体验(User ...
### 自整理Java关于基础和框架的面试题 #### 基础知识点 ##### JDK常用的包 - **java.lang**: 包含所有基本类,如`String`、`Math`等。 - **java.util**: 提供集合框架、日期/时间设施、事件模型、杂项实用程序类...
- **Java 8之前**:使用Date类配合SimpleDateFormat进行转换。 - **Java 8及以后**:推荐使用java.time包下的类,如LocalDateTime、Instant等。 ##### 阶乘 - **定义**:一个正整数n的阶乘(n!)是从1乘到n的所有...
IBatisNet获得高性能与灵活性也是付出代价的,它牺牲了数据库可移植性:由于编写SQL模板不得不用到数据库产品的一些语法差异,例如ORACLE的TO_DATE、Length()、SYSDATE等,为了把产品移植到其它数据库,开发人员不得...