首页 > 解决方案 > mybaties 选择时的类型转换

问题描述

我在我的项目中使用带有 AWS Oracle RDS 的 mybaties 3.2.6。对于一个表选择,我从表中得到时间戳,但在对象端我有字符串。到目前为止,我一直在使用 TO_CHAR 从 timeStamp(JDBC 端)转换为 String(Java 端),就像这样..

SELECT SESSION_ID,
      ct.MEMBER_ID as MEMBER_ID  ,
      ct.KO_MEMBER_ID as KO_MEMBER_ID, 
      ct.KO_MEMBER_NAME as KO_MEMBER_NAME, 
      ct.REASON as REASON, 
      TO_CHAR(ct.TICKET_DTM,'YYYY-MM-DD HH24:MI:SS.FF') as TICKET_DTM, 
      ct.DATA_TYPE as DATA_TYPE  
      FROM TICKET ct
      WHERE id=#{Id}
      fetch first 300 rows only

但是为了避免 DB 函数绑定问题,我不想再使用 TO_CHAR 函数了。我可以为此在 Java 端/mybaties 端做点什么,比如 CustomTypeHandler 或类似的东西吗?在插入时,我使用带有 java 类型和 Jdbc 类型表示法的 CustomTypeHandler,例如 ...

#{birthday,jdbcType=DATE,javaType=java.lang.String,typeHandler=StringDateTypeHandler}

这适用于类型转换的插入...

有什么东西可以帮助我在选择时进行类型转换,就像我们在插入时一样?

标签: oraclemybatisamazon-rdsspring-mybatis

解决方案


可以 typeHandler在结果映射中为您的类型指定。

如果您的查询不使用结果映射,则需要通过指定resultMap属性来引入它,select如下所示:

 <select id="getTickets" resultMap="ticketResultMap">
    ... you query goes here
 </select>

还添加resultMap这样的定义:

<resultMap id="ticketResultMap" type="Ticket">
    <id property="id" column="id"/>
    <result property="yourDateColumn" column="TICKET_DTM" 
        typeHandler="StringDateTypeHandler"/>
    <!-- other fields mappings or use autoMapping="true" -->
</resultMap>

推荐阅读