Spring Boot中JdbcTemplate.query的RowMapper泛型类型错误求助
解决Spring JDBC RowMapper泛型类型不匹配错误
错误根源
从报错信息能直接定位问题:JDBC Template的query方法期望接收org.flywaydb.core.internal.jdbc.RowMapper类型参数,但你的PersonRowMapper实现的是Spring官方的org.springframework.jdbc.core.RowMapper接口——两者属于不同类库,导致类型完全不兼容。
这类问题通常是依赖冲突或类路径优先级异常引发的,Flyway内部的RowMapper类被错误关联到了Spring JDBC Template的方法调用上。
解决方案
确认RowMapper导入正确性
你的PersonRowMapper已经正确导入了Spring的RowMapper,保持该配置即可:import org.springframework.jdbc.core.RowMapper; // 正确的导入路径校验JdbcTemplate类型
确保你注入/实例化的jdbcTemplate是Spring官方的org.springframework.jdbc.core.JdbcTemplate,而非Flyway相关类。如果是Maven/Gradle项目,检查依赖配置,避免Flyway依赖覆盖Spring JDBC的类路径。简化query方法调用
当前调用传入了空的Object[]参数,可直接使用无参数重载方法,减少类型推断干扰:@Override public List<Person> selectAllPerson() { final String sql = "SELECT id, name FROM person"; List<Person> persons = jdbcTemplate.query(sql, new PersonRowMapper()); return persons; }排查依赖冲突(可选)
若上述步骤无效,用依赖分析工具(如Maven的dependency:tree、Gradle的dependencies任务)检查Flyway与Spring JDBC的依赖冲突,排除不必要的传递依赖。
内容的提问来源于stack exchange,提问作者Girish
相关产品推荐
相关产品推荐

