使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常
使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常
问题描述
- 在使用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
- 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 原文地址
http://www.bieryun.com/3176.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里技术精华干货整理
本文用于整理阿里开源出来的技术电子书,更多精彩请搜微信公众号:“阿里技术”。 Java 《阿里巴巴Java开发手册》(详尽版) 官方下载 备用下载 《阿里巴巴Java开发手册》(终极版) 官方下载 备用下载 《阿里巴巴Java开发规约》(扫描插件) GitHub仓库 使用指南 Android 《阿里巴巴Android开发手册》 官方下载 备用下载 《深入探索Android热修复技术原理》 官方下载 备用下载 其它 《阿里技术参考图册》(研发篇) 官方下载 备用下载 《阿里技术参考图册》(算法篇) 官方下载 备用下载 《2017阿里技术年度精选集上》 官方下载 备用下载 《2017阿里技术年度精选集下》 官方下载 备用下载 《九年双11:互联网技术超级工程》 官方下载 备用下载 《强化学习在阿里的技术演进与业务创新》 官方下载 备用下载 《不一样的技术创新——阿里巴巴2016双11背后的技术》 备用下载 《不止代码》 官方下载 备用下载 《阿里机器智能技术精选》 官方下载 备用下载 欢迎留言补充
- 下一篇
vue兄弟组件通信(非vuex)
实例:点击按钮将组件A的"A数据"传到组件B的方框内 image 实现思路:根据官方文档的教程->使用一个空的 Vue 实例作为事件总线 官方文档 代码展示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/javascript" src="lib/vue.min.js" ></script> <title>组件通讯</title> <style> .b{ width: 100px; height: 100px; border: 2px darkblue solid; } #app{ margin: 0 ...
相关文章
文章评论
共有0条评论来说两句吧...