irpas技术客

记一次mybatis的坑:Error attempting to get column ‘XXX‘ from result set. Cause: java.s

网络投稿 7225

1、使用的是Oracle数据库,插入数据时正常,但是查询时,却报异常,而且还是类型不支持

如下:

对比一下实体类的数据类型和表的数据类型,完全一致,不存在类型不一致问题

2、层层分析: 2.1 原来的SQL

select? ?*? ? from 表名 where id=#{id}

2.2 把报错的字段剔除,不进行查询:

id ,name,userid,?downloadtime,?depname,rowsnumber??from 表名 where id=#{id}

2.3 本来只查询6条记录!结果!结果出乎意料

title字段竟然还是进行了查询,总共7条!!!!

大致结果如下:

id=0000000013, name=张三,? userid=fzhangsan,? downloadtime=Mon May 16 19:45:45 CST 2022, depname=人事部,? title=人事部, rowsnumber=7,?

而且title的值竟然与上一个字段"depname"重复了!

2.4 对SQL语句再进行改造测试,只查询2个字段

id ,name,userid?from 表名 where id=#{id}

结果!又出来了新的异常!数据越界

Cause: java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 2

如图:

?3、原因及解决方法

原因:我的实体类手动生成了有参的构造方法,且该构造方法的参数不是完整的!

而mybatis在进行查询时,会自动加载无参的构造方法,此时我手动创建了有参的构造方法,导致无参构造方法已经覆盖了!

解决方法:手动添加无参构造方法即可

4、总结

4.1 使用mybatis时,需要注意实体类的无参构造方法是否存在,不要被覆盖了!

4.2 以前都是使用lombok的@Data注解,默认构造方法会存在的,一般不会出现这个问题


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #attempting #To #get #column #xxx #from #Result