您的位置:首页 > 数据库

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

2016-12-09 10:20 856 查看
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


问题描述:

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐