记一次@Builder引发的BUG
记一次@Builder引发的Bug
问题描述:
使用MybatisPlus的selectOne方法搜索一个User类时报错
1 | org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: |
报错代码
1 | User user = userMapper.selectOne(new LambdaQueryWrapper().select(User::getDefaultReminderInterval)); |
问题分析
根据报错信息,出错的原因是因为数组越界,推测会不会是因为搜索出来两个对象报错,但是改用selectList方法还是报错,推测是在创建User对象的过程中报的错,后来发现添加了@Builder后会自动为对象创建一个全参的构造器,而且没有主动为User类创建一个无参构造器,导致在创建User对象的时候,只能使用全参构造器,这是需要全部的属性才能创建对象,但是sql语句只查询了一列,导致在获取其他参数的时候越界
总结
这次的报错主要是没有理解好@Builder注解的作用,不知道会自动生成一个全参构造器,并且没有养成好的习惯手动为对象创建一个无参构造器导致出问题,后续要养成好的编程习惯
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Coding Road!