Mybatis:使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
2017-06-13 00:00
501 查看
摘要: 在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,异常
问题描述:
在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常如下:
mapper文件中代码如下:
解决办法一:
经过对代码分析,是由于未指定传入参数pxh的类型,当mybatis接收到null时,无法将其正确的进行解析,进而导致上述异常。
将mapper中代码修改如下:
解决办法二:
在配置文件mybatis-config.xml中加入如下代码:
这样,即使传入参数为null,mybatis也能够将其转换成正确的数据类型,并进行存储操作。
附:常见的Jdbc Type 与 Java Type之间的关系
问题描述:
在使用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: 无效的列类型: 1111 at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:76)
mapper文件中代码如下:
<update id="update" parameterType="com.hsoft.mss.xtgl.model.Bean"> update table <set> pxh = #{pxh}, // 当pxh传入null时,抛出上述异常,pxh在bean中的类型为Long time = sysdate </set> where id = #{id} </update>
解决办法一:
经过对代码分析,是由于未指定传入参数pxh的类型,当mybatis接收到null时,无法将其正确的进行解析,进而导致上述异常。
将mapper中代码修改如下:
<update id="update" parameterType="com.hsoft.mss.xtgl.model.Bean"> update table <set> pxh = #{pxh,jdbcType=NUMERIC}, //将pxh的类型指定为NUMERIC即可 time = sysdate </set> where id = #{id,jdbcType=VARCHAR} </update>
解决办法二:
在配置文件mybatis-config.xml中加入如下代码:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> ... <settings> <setting name="jdbcTypeForNull" value="NULL" /> </settings> ... </configuration>
这样,即使传入参数为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|
相关文章推荐
- Mybatis:使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
- 在Mybatis中,使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
- Mybatis:使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
- ASP类型转换提示无效使用 Null
- 使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,报异常的解决方法
- 在SharePoint 2010 中使用REST时提示:未能加载类型System.Data.Services.Providers.IDataServiceUpdateProvider的解决办法
- 出现“MSCOMCTL.OCX或其附件之一不能正确使用:一个文件丢失或无效或'comctl32.ocx'其附件之一不能正确使用:一个文件丢失或无效”的提示的解决办法
- 问题描述: 在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常如下:
- 【MyBatis】关于MyBatis插入自动增长id的Bean到数据库后返回的id为null的解决办法
- 解决mybatis使用char类型字段查询oracle数据库时结果返回null问题
- 解决使用MyBatis只传入一个String类型的参数时出现异常
- 安装Visual Studio2015后,使用VS2013开发的项目,在IIS访问都提示“公共语言运行时检测到无效的程序”的解决办法
- asp.net提示使用的 SQL Server 版本不支持数据类型“date”的解决办法:
- Mybatis 报无效的列类型 两种解决办法
- DbEntry.net使用时出现System.Data.SqlTypes.SqlNullValueException解决办法
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- 急!delphi中variant能否和object类型转换。实例:在使用getpropvalue(range,'属性')时提示类型有错,如何解决?!!
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- 转摘--MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法