我正在使用Spring 3.1.2开发一个Web应用程序,需要创建一个自定义行映射器。我创建了一个实现RowMapper的私有静态final类,但是我收到错误消息“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;
}
}
答案 0 :(得分:4)
我有同样的问题,Eclipse警告我RowMapper不是通用的。
所以我手工编写了导入内容:
import org.springframework.jdbc.core.RowMapper;
出现此错误:The import org.springframework.jdbc.core.RowMapper collides with another import statement
所以我查看了我的其他import语句,我在Spring项目中发现了什么:
导入javax.swing.tree.RowMapper;
...我删除了导入,然后一切正常。
答案 1 :(得分: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;
}
}
答案 2 :(得分: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>
答案 3 :(得分:0)
在修补了一点之后,我找到了解决问题的方法。在Tomcat的lib文件夹中有一些旧的弹簧罐(2.0,我猜)。这导致Spring使用旧版本的RowMapper,它不支持参数化。
解决此问题的方法是从构建路径中删除较旧的jar,或者从Order and Export选项卡更改jar的顺序,并将最新的jar带到顶部。
感谢所有回复的人!
答案 4 :(得分: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>
答案 5 :(得分:-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>