iBatis动态查询Date型返回值问题求援

发布于 2021-11-29 02:40:44 字数 2468 浏览 962 评论 8

配置文件如下:
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总是没有被这个查询调用,这个问题已经困扰两天了,请精通这部分知识的高手赐教!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

孤檠 2021-11-30 00:37:06

引用来自“sdfsadfasd”的评论

你只是定义的typeHandler,也没发现你调用啊?

伴我心暖 2021-11-30 00:36:34

正是因为表结构是动态的无法把Bean写死采用了Map的映射,这个问题已经解决时Oracle10G的问题在9i和11g中都无此问题,可以通过修改iBatis的源码方式实现。

复古式 2021-11-30 00:27:17

那你可以写个JavaBean,把返回值给对象

深巷少女 2021-11-29 23:15:44

实现的是TypeHandlerCallback这个接口,你说的这种方式也不行。这里问题应该是动态Map映射走默认的字段映射关系,而没有调用我们实现的这个接口。

旧伤慢歌 2021-11-29 21:49:39

TimestampTypeHandlerCallback

是你自己写的?实现哪个借口了?

残花月 2021-11-29 21:11:39

数据库应该存的是DATE,把3个typeHandler 去掉换成试试

<typeHandler javaType="java.util.Date" jdbcType="DATE" callback="com.dao.TimestampTypeHandlerCallback"/>

辞别 2021-11-29 16:31:52

是这样的,我定义在全局配置文件中,这个应该是默认全局生效的啊,在我明确定义了Bean的地方跟踪代码的确调用了,就是在用map映射的时候发现没有调用,请问这个如何处理?

谁的新欢旧爱 2021-11-29 16:30:00

你只是定义的typeHandler,也没发现你调用啊?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文