工作经验:mybatis 处理 oracle Long 类型

Posted 不忘初心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工作经验:mybatis 处理 oracle Long 类型相关的知识,希望对你有一定的参考价值。

前言:mybatis 接收 oracle 中 LONG 类型的,报错:无效的列类型: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor

注意

  当表中有 long 类型的字段存在时,查询多条数据(列表)时能不查这个字段就不查这个字段。因为查了这个字段会影响速度。

情况

  oracle 表中有个字段为 LONG 类型,LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。(具体详解可以百度)

  由于数据库中的这张表是别的地方提供的,不能修改,只能查询,所以不能修改 oracle 表中这个字段的类型。

  所以只能处理当前问题。当前问题如下:java 实体使用 String 类型接ItemE,mybatis sql 中使用 resultMap 形式,sql resultMap 如下

<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.yule.demo">
        <result column="ITEM_E" property="itemE" jdbcType="LONGVARCHAR"/>
    </resultMap>

  然后查询 sql 报错:

解决方案

  将 sql 中的 LONGVARCHAR 改为 LONGVARBINARY 即可。

<result column="ITEM_E" property="itemE" jdbcType="LONGVARBINARY"/>

 

 补充(转http://blog.csdn.net/loongshawn/article/details/50496460

Mybatis JdbcType与Oracle、mysql数据类型对应列表

 

MybatisJdbcTypeOracleMySql
JdbcType ARRAY    
JdbcType BIGINT   BIGINT
JdbcType BINARY    
JdbcType BIT   BIT
JdbcType BLOB BLOB BLOB
JdbcType BOOLEAN    
JdbcType CHAR CHAR CHAR
JdbcType CLOB CLOB TEXT
JdbcType CURSOR    
JdbcType DATE DATE DATE
JdbcType DECIMAL DECIMAL DECIMAL
JdbcType DOUBLE NUMBER DOUBLE
JdbcType FLOAT FLOAT FLOAT
JdbcType INTEGER INTEGER INTEGER
JdbcType LONGVARBINARY    
JdbcType LONGVARCHAR LONG VARCHAR  
JdbcType NCHAR NCHAR  
JdbcType NCLOB NCLOB  
JdbcType NULL    
JdbcType NUMERIC NUMERIC/NUMBER NUMERIC/
JdbcType NVARCHAR    
JdbcType OTHER    
JdbcType REAL REAL REAL
JdbcType SMALLINT SMALLINT SMALLINT
JdbcType STRUCT    
JdbcType TIME   TIME
JdbcType TIMESTAMP TIMESTAMP TIMESTAMP/DATETIME
JdbcType TINYINT   TINYINT
JdbcType UNDEFINED    
JdbcType VARBINARY    
JdbcType VARCHAR VARCHAR VARCHAR

 


注意到, MyBatis的JdbcType中部分没有对应到Oracle和Mysql的数据类型中(或许由于自己遗漏),不过不用担心,后续大家碰到再具体分析;同时上述对应关系不一定是一一对应,请大家了解。

大家主要掌握基本的数字、时间、字符串就足以应对日常开发了。

 

  

以上是关于工作经验:mybatis 处理 oracle Long 类型的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 表锁处理总结

Oracle锁表处理操作笔记

Oracle-开篇-学习经验

当MyBatis 3.5.X遇上JDK8竟然出现了性能问题,全项目组都得加班~

java mybatis对oracle long解决办法?

TiDB 适配应用实践:MyBatis 3.5.X 在 JDK8 中性能问题的排查与优化