myBatis3.1.0升级遇到的一个BUG

主要是进行数据库字段到java对象属性映射时的问题。

 

这是模仿项目简单写的一个demo,为了复现BUG。数据库中有10列,但是查询结果映射时实体类中只有部分属性。

在低版本 3.1.0的时候,如果数据库多余的列值为null时是不会出BUG的,但是升级myBatis版本后,会出BUG。

低版本的映射逻辑代码:

高版本的映射逻辑代码:

applyPropertMappings方法中进行查询到的列的value映射到JAVA对象的属性。

metaObject.getSetterType(property).isPrimitive()这个我们返回的是非原始类型(username对应的是String,所以结果为fasle,!false值为true,所以会执行下面的setValue方法,然后就会抛错,未找到相应的set方法),所以同样查询到 username为null,高版本出错了,而低版本列值为null,不会进行映射操作,所以不会抛错。

总结:代码开发需要规范,保证dao映射实体类的属性字段和数据库的列保持一致。

 

 

 Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'userName' of 'class learn.User' with value '' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'userName' in 'class learn.User'

	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.ap
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值