我在我的项目中使用 Spring JdbcTemplate 类。我有以下代码:
List<PersonDTO> personList = jdbcTemplate.query(query, new RowMapper<PersonDTO>() {
@Override
public PersonDTO mapRow(ResultSet rs, int rowNumber) throws SQLException {
PersonDTO personDTO = new PersonDTO ();
personDTO.setPerId(rs.getString("COL_ONE"));
personDTO.setIdTypeCd(rs.getString("COL_TWO"));
return personDTO;
}
});
现在我想用 java8 lambda 表达式替换匿名类 RowMapper
,如下所示:
Runnable r1 = () -> {
System.out.println("My Runnable");
};
可能吗?
最佳答案
AFAIK RowMapper
是一个函数式接口(interface),所以这可以工作。 lambda 表达式无法声明已检查异常,因此您需要将其包装起来...
jdbcTemplate.query(query, (ResultSet rs, int rowNumber) -> {
PersonDTO personDTO = new PersonDTO ();
personDTO.setPerId(rs.getString("COL_ONE"));
personDTO.setIdTypeCd(rs.getString("COL_TWO"));
return personDTO;
});
评论很到位:由于该功能接口(interface)已经声明抛出异常,因此无需捕获它。
关于spring - 用 java 8 lambda 表达式替换 RowMapper 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49650705/