配置文件如下:
sqlMapConfig部分
<typeHandler javaType="java.sql.Date" jdbcType="DATE" callback="com.dao.TimestampTypeHandlerCallback"/>
<typeHandler javaType="java.util.Date" jdbcType="TIME" callback="com.dao.TimestampTypeHandlerCallback"/>
<typeHandler javaType="java.sql.Timestamp" jdbcType="TIMESTAMP" callback="com.TimestampTypeHandlerCallback"/>
sqlMap配置:
<select id="query" parameterClass="FlowDialUserRpt" resultClass="java.util.HashMap" remapResults="true">
SELECT 
<iterate property="groupFieldsList" conjunction=",">
$groupFieldsList[]$
</iterate>
,
<iterate property="fieldsList" conjunction=",">
$fieldsList[]$
</iterate>
from ( SELECT ROWNUM ROW_ID, T.* FROM (
SELECT 
<iterate property="groupFieldsList" conjunction=",">
$groupFieldsList[]$
</iterate>
,
<iterate property="functionFieldsList" conjunction=",">
$functionFieldsList[]$
</iterate>
from FLOW_DIAL_USER_SUMFLOW_RPT
WHERE DATA_TYPE = #dataType#
<isNotEmpty prepend="AND" property="userAccount">
USER_ACCOUNT=#userAccount#
</isNotEmpty>
<isNotEmpty prepend="AND" property="flowDirection">
FLOW_DIRECTION=#flowDirection#
</isNotEmpty>
<isNotEmpty prepend="AND" property="fromDate">
<![CDATA[ 
UPDATE_DATE>=#fromDate#
]]>
</isNotEmpty>
<isNotEmpty prepend="AND" property="toDate">
<![CDATA[
UPDATE_DATE<=#toDate#
]]>
</isNotEmpty>
<iterate property="groupFieldsList" open="GROUP BY " conjunction=",">
$groupFieldsList[]$
</iterate>
<dynamic prepend="ORDER BY">
<isNotEmpty property="orderStr">
$orderStr$
</isNotEmpty>
</dynamic>
) T
<isNotEqual property="start" compareValue="0">
<isNotEqual property="end" compareValue="0">
WHERE ROWNUM <![CDATA[ < ]]>
= #end#
</isNotEqual>
</isNotEqual>
)
<isNotEqual property="start" compareValue="0">
<isNotEqual property="end" compareValue="0">
WHERE ROW_ID <![CDATA[ > ]]>
= #start#
</isNotEqual>
</isNotEqual>
</select>
现在的问题是:在查询返回值中在oracle中Date型数值,返回到Map中总是被封装为Java.sql.Date类型,改类型有个问题:时间值只能精确到天,而实际需要精确到秒,于是我写了在sqlMapConfig中写了那样的typeHandler ,但是发现该typeHandler总是没有被这个查询调用,这个问题已经困扰两天了,请精通这部分知识的高手赐教!

解决方案 »

  1.   

    lz这个问题我们可以从sql语句方面解决,在sql语句中将返回的date数据指通过orcale函数转化即可解决。
      

  2.   

    一般都是用oracle的函数to_char转换成字符串再返回lz考虑一下吧good luck
      

  3.   

    帮忙顶下,typeHandler 不太清楚.
    楼上的方法可以试下 
    to_char(date,'YYYY-MM-DD HH24:MI:SS')
    也可以在 java 代码内转
    Date date = new Date();
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String sdate = format.format(date);
      

  4.   

    这个问题是Oracle10g 驱动的一个BUG,11g和9i就没有这个问题。