2

我正在使用 Spring 3.1.2 开发一个 Web 应用程序,并且需要创建一个自定义行映射器。我创建了一个实现 RowMapper 的私有静态最终类,但我收到错误消息“RowMapper 类型不是通用的;它不能用参数参数化”。

我的 lib 文件夹中所有与 Spring 相关的 jar 都是 3.1.2.RELEASE 版本。我一直无法在其他地方找到任何类似的东西。任何想法为什么会发生这种情况?

谢谢。

这是示例代码:

public class OutPatient extends Patient{
     @Pattern(regexp="[0-9]+", message="OPD No. should only contain digits.")
String opdNo;

public String getOpdNo() {
    return opdNo;
}

public void setOpdNo(String opdNo) {
    this.opdNo = opdNo;
}
}

DAO类:

 @Repository("dbHelper")
 public class DBHelperImpl{
private JdbcTemplate jdbcTemplate;
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

@Autowired
public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(dataSource);
    this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}

     public List<OutPatient> fetchOutPatients() {
    String sql = "SELECT  OPDNO as opdNo FROM `test`.`out_patient`";

    @SuppressWarnings("unchecked")  //Have to add this annotation to prevent warning
    List<OutPatient> outPatients = jdbcTemplate.query(sql, new OutPatientRowMapper());
    return outPatients;     

}

     private static final class OutPatientRowMapper implements RowMapper{  //Unable to add <OutPatient> generics here!      
    public OutPatient mapRow(ResultSet rs, int rowNum) throws SQLException {
        OutPatient outPatient = new OutPatient();           
        outPatient.setOpdNo(rs.getString("opdNo"));
                       return outPatient;
              }
     }
4

6 回答 6

8

我遇到了同样的问题,Eclipse 警告我 RowMapper 不是通用的。

所以我手工编写了导入:

导入 org.springframework.jdbc.core.RowMapper;

这产生了这个错误:The import org.springframework.jdbc.core.RowMapper collides with another import statement

所以我查看了我的其他导入语句,我发现我的 Spring 项目中潜伏着什么:

导入 javax.swing.tree.RowMapper;

...我删除了该导入,然后一切正常。

于 2014-11-08T01:10:45.700 回答
2

它应该是这样的

List<Bank> list = t.query(sql, args, new RowMapper<Bank>() {
    @Override
    public Bank mapRow(ResultSet rs, int rowNum) throws SQLException {
        Bank t = new Bank();
        t.setName(rs.getString("name"));
        return t;
    }
});

此代码也可以在没有警告的情况下编译

   private static final class OutPatientRowMapper implements
            RowMapper<OutPatient> {
        public OutPatient mapRow(ResultSet rs, int rowNum) throws SQLException {
            OutPatient outPatient = new OutPatient();
            outPatient.setOpdNo(rs.getString("opdNo"));
            return outPatient;
        }
    }
于 2012-12-11T12:27:42.517 回答
1

以上答案都不适合我。我拥有所有正确的 Maven 依赖项;他们只是在 pom.xml 文件中的顺序错误。在我将顺序更改为下面的顺序后,RowMapper 被识别为参数化类。

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.5</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>20030825.184428</version>
    </dependency>
  </dependencies>
于 2016-12-28T18:59:23.500 回答
0

经过一番修改后,我找到了解决问题的方法。Tomcat 的 lib 文件夹中有一些旧的 spring jar(我猜是 2.0)。这导致 spring 使用不支持参数化的旧版本的 RowMapper。

解决此问题的方法是从构建路径中删除较旧的 jar,或者从“订购和导出”选项卡中更改 jar 的顺序并将最新的 jar 置于顶部。

感谢所有回复的人!

于 2012-12-12T09:36:27.223 回答
0

您必须添加这些依赖项

    <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.4.RELEASE</version>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>
于 2013-12-18T09:32:39.150 回答
-1

问题是它找不到获取 RowMapper 的库。解决方案是添加依赖项。

这些是您必须添加到 pom.xml 中的内容:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>3.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.0.0.RELEASE</version>
    </dependency>
于 2018-02-20T19:58:16.810 回答