博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis:使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
阅读量:6222 次
发布时间:2019-06-21

本文共 2337 字,大约阅读时间需要 7 分钟。

  hot3.png

问题描述:

在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常如下:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=‘pxh‘, mode=IN, javaType=class java.lang.Long, jdbcType=null, numericScale=null, resultMapId=‘null‘, jdbcTypeName=‘null‘, expression=‘null‘}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #5 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:76)

mapper文件中代码如下:

update table
pxh = #{pxh}, // 当pxh传入null时,抛出上述异常,pxh在bean中的类型为Long time = sysdate
where id = #{id}

解决办法一:

经过对代码分析,是由于未指定传入参数pxh的类型,当mybatis接收到null时,无法将其正确的进行解析,进而导致上述异常。

将mapper中代码修改如下:

update table
pxh = #{pxh,jdbcType=NUMERIC}, //将pxh的类型指定为NUMERIC即可 time = sysdate
where id = #{id,jdbcType=VARCHAR}

解决办法二:

在配置文件mybatis-config.xml中加入如下代码:

...
...

这样,即使传入参数为null,mybatis也能够将其转换成正确的数据类型,并进行存储操作。

附:常见的Jdbc Type 与 Java Type之间的关系

|JDBC Type            |Java Type|| ------------- |:-------------:||CHAR                 |String|  |VARCHAR              |String|  |LONGVARCHAR          |String|  |NUMERIC              |java.math.BigDecimal|  |DECIMAL              |java.math.BigDecimal|  |BIT                  |boolean|  |BOOLEAN              |boolean|  |TINYINT              |byte|  |SMALLINT             |short|  |INTEGER              |int|  |BIGINT               |long|  |REAL                 |float|  |FLOAT                |double|  |DOUBLE               |double|  |BINARY               |byte[]|  |VARBINARY            |byte[]|  |LONGVARBINARY        |byte[]|  |DATE                 |java.sql.Date|  |TIME                 |java.sql.Time|  |TIMESTAMP            |java.sql.Timestamp|  |CLOB                 |Clob|  |BLOB                 |Blob|  |ARRAY                |Array|

 

转载于:https://my.oschina.net/u/859228/blog/919981

你可能感兴趣的文章
电子书下载:Silverlight 4 Business Intelligence Software
查看>>
Android startActivityForResult()的用法
查看>>
正则域名
查看>>
Delphi中COM自动化对象中使用事件
查看>>
WebAPI前置知识:HTTP与RestfulAPI
查看>>
单一职责原则
查看>>
Windows Phone 7发布了
查看>>
c#必须对其强签名
查看>>
如何在IIS6,7中部署ASP.NET网站
查看>>
HDU 4451 Dressing
查看>>
nhibernate学习之集合组合依赖
查看>>
Creating corner with different angle by using css and js
查看>>
QC客户端运行时超卡的原因解决方案
查看>>
eclipse复制工程需要注意的地方
查看>>
Python 入门教程 10 ---- Student Becomes the Teacher
查看>>
UVA 11889 - Benefit
查看>>
[Leetcode] Linked List Cycle II
查看>>
Python解析非标准JSON(Key值非字符串)
查看>>
缓存服务器 之 Linux下缓存服务器的应用
查看>>
443 Chapter6.Designing Database Security
查看>>