使用@Builder注解需注意,mybatis查询报错

/ 技术收藏 / 没有评论 / 286浏览

@builder生成的构造方法会包含所有的属性,包括表示了 @TableField(exist = false) 的属性,所以

在org.apache.ibatis.executor.resultset.applyColumnOrderBasedConstructorAutomapping 创建映射生成结果集时,会导致数组越界 ~~String columnName = rsw.getColumnNames().get(i);~~

  private boolean applyColumnOrderBasedConstructorAutomapping(ResultSetWrapper rsw, List<Class<?>> constructorArgTypes,
      List<Object> constructorArgs, Constructor<?> constructor, boolean foundValues) throws SQLException {
    for (int i = 0; i < constructor.getParameterTypes().length; i++) {
      Class<?> parameterType = constructor.getParameterTypes()[i];
      String columnName = rsw.getColumnNames().get(i);
      TypeHandler<?> typeHandler = rsw.getTypeHandler(parameterType, columnName);
      Object value = typeHandler.getResult(rsw.getResultSet(), columnName);
      constructorArgTypes.add(parameterType);
      constructorArgs.add(value);
      foundValues = value != null || foundValues;
    }
    return foundValues;
  }