iBatis动态查询Date型返回值问题求援
配置文件如下:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
引用来自“sdfsadfasd”的评论
你只是定义的typeHandler,也没发现你调用啊?
正是因为表结构是动态的无法把Bean写死采用了Map的映射,这个问题已经解决时Oracle10G的问题在9i和11g中都无此问题,可以通过修改iBatis的源码方式实现。
那你可以写个JavaBean,把返回值给对象
实现的是TypeHandlerCallback这个接口,你说的这种方式也不行。这里问题应该是动态Map映射走默认的字段映射关系,而没有调用我们实现的这个接口。
TimestampTypeHandlerCallback
是你自己写的?实现哪个借口了?
数据库应该存的是DATE,把3个typeHandler 去掉换成试试
<typeHandler javaType="java.util.Date" jdbcType="DATE" callback="com.dao.TimestampTypeHandlerCallback"/>
是这样的,我定义在全局配置文件中,这个应该是默认全局生效的啊,在我明确定义了Bean的地方跟踪代码的确调用了,就是在用map映射的时候发现没有调用,请问这个如何处理?
你只是定义的typeHandler,也没发现你调用啊?