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注解,默认构造方法会存在的,一般不会出现这个问题
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99607.html