用 java 8 lambda 表达式替换 RowMapper 对象
Replacing RowMapper object with java 8 lamda expression
我在 project.I 中使用 Spring JdbcTemplate class 具有以下代码:
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;
}
});
现在我想将匿名 class RowMapper
替换为 java8 lamda 表达式,如下所示:
Runnable r1 = () -> {
System.out.println("My Runnable");
};
可以吗???
试试这个
List<PersonDTO> personList = jdbcTemplate.query(query, (rs,rowNumber) -> {
try
{PersonDTO personDTO = new PersonDTO ();
personDTO.setPerId(rs.getString("COL_ONE"));
personDTO.setIdTypeCd(rs.getString("COL_TWO"));
return personDTO;
}catch(SQLException e){
throw new RuntimeException("your error message",e) // or other unchecked exception here
}
});
AFAIK RowMapper
是一个功能接口,所以这会起作用。 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;
});
评论很到位:因为那个函数式接口已经声明抛出异常,所以没有必要捕获它。
我在 project.I 中使用 Spring JdbcTemplate class 具有以下代码:
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;
}
});
现在我想将匿名 class RowMapper
替换为 java8 lamda 表达式,如下所示:
Runnable r1 = () -> {
System.out.println("My Runnable");
};
可以吗???
试试这个
List<PersonDTO> personList = jdbcTemplate.query(query, (rs,rowNumber) -> {
try
{PersonDTO personDTO = new PersonDTO ();
personDTO.setPerId(rs.getString("COL_ONE"));
personDTO.setIdTypeCd(rs.getString("COL_TWO"));
return personDTO;
}catch(SQLException e){
throw new RuntimeException("your error message",e) // or other unchecked exception here
}
});
AFAIK RowMapper
是一个功能接口,所以这会起作用。 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;
});
评论很到位:因为那个函数式接口已经声明抛出异常,所以没有必要捕获它。