用java 8 lamda表达式替换RowMapper对象

时间:2018-04-04 12:11:12

标签: spring java-8 spring-jdbc

我在项目中使用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 lamda表达式替换匿名类RowMapper,如下所示:

Runnable r1 = () -> {
        System.out.println("My Runnable");
    };

有可能???

2 个答案:

答案 0 :(得分:4)

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;
});

注释点是:由于该功能接口已经声明抛出异常,因此无需捕获它。

答案 1 :(得分:2)

试试这个

ready