首页 / JAVA / JDBCTemplate中使用BeanPropertyRowMapper查询数据库中的数据封装成Javabean对象可能出现的问题(org.springframework.beans.TypeMis)
JDBCTemplate中使用BeanPropertyRowMapper查询数据库中的数据封装成Javabean对象可能出现的问题(org.springframework.beans.TypeMis)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JDBCTemplate中使用BeanPropertyRowMapper查询数据库中的数据封装成Javabean对象可能出现的问题(org.springframework.beans.TypeMis),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2451字,纯文字阅读大概需要4分钟。
内容图文
BeanPropertyRowMapper查询数据库中的数据封装成Javabean对象问题
BeanPropertyRowMapper 错误解决
在我们使用JDBCTemplate中的BeanPropertyRowMapper时,会出现封装对象过程中的转换问题。
例如以下出错信息:
org.springframework.beans.TypeMismatchException: Failed to convert
property value of type ‘null’ to required type ‘double’ for property
‘bonus’…
也就是
- TypeMismatchException:未能将属性值类型‘null’转换为属性‘bonus’所需的类型‘double’;
- ConversionFailedException:值‘null’从type [null]转换为type [double]失败;嵌套异常是java.lang。
- IllegalArgumentException:不能将空值分配给原语类型
- 其实,这是由于在数据库中的表中bonus这一栏中的值存在null,而由于int,double这类基本类型的数据不能接受null值,因此不能将null的值转换为int或者double类型。那么我们可以想到int,double对应的包装类Interger,Double这些可以接受null值,所以,我们改变相应变量类型即可。
解决方案:在emp的Javabean对象中,将成员全部定义为对应的引用类数据类型的数据。因为对应的包装类是可以接受null的。
源代码(错误)
修改后:
另外,emp的Javabean类中的每一个属性名都必须尽量和数据库中的字段名相同,其次emp的Javabean类中必须要有每一个属性的setter方法。
浅析BeanPropertyRowMapper工作原理
我们在使用BeanPropertyRowMapper时,是给query()方法传递一个BeanPropertyRowMapper对象,让JdbcTemplate帮我们把查询结果集ResultSet的每一行结果都使用BeanPropertyRowMapper.mapRow()方法,转化成我们想要的Java类对象。从BeanPropertyRowMapper名称上也能够看出来,它是用来映射Java对象的属性和MySQL表的字段名称的。但是,在映射的过程中,如果不注意Java对象的属性名的规范,很可能就得不到我们想要的结果。
我们看一下,在创建BeanPropertyRowMapper对象时,会调用其中的initialize方法,我们看一下initialize方法的具体实现。
BeanPropertyRowMapper中的initialize方法
首选,说一下mappedFields,mapperFields是一个HashMap,用来匹配Java对象的属性和MySQL表的字段名的。mapperFields中存放所有可能与MySQL表的字段名映射上的那些Java属性名字。
如红色框框的第一行,在initialize方法中,BeanPropertyRowMapper会把传入的泛型Java类的所有属性名称的全小写形式放入mapperFields中,
第二行,把Java类的属性名转化成下划线分割的形式,如myName会被转化成my_name,这是因为,数据库在设计字段名称的时候,一般都会使用下划线分割形式,也就是my_name。
所以,如果在使用时,Java类名称要想和数据库字段名称匹配上,必须要把数据库字段名称设计成以下两种中的一种,
数据库字段名设计成全小写的形式,如myname;数据库字段名设计成下划线分割的形式,如my_name;
Java属性名称应该尽量遵循Java编码风格,使用camelCase风格,如myName。
内容总结
以上是互联网集市为您收集整理的JDBCTemplate中使用BeanPropertyRowMapper查询数据库中的数据封装成Javabean对象可能出现的问题(org.springframework.beans.TypeMis)全部内容,希望文章能够帮你解决JDBCTemplate中使用BeanPropertyRowMapper查询数据库中的数据封装成Javabean对象可能出现的问题(org.springframework.beans.TypeMis)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。