spring 使用java 8 lambda表达式替换RowMapper对象

cgfeq70w  于 2022-12-10  发布在  Spring
关注(0)|答案(2)|浏览(156)

我在我的项目中使用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");
    };

有可能吗?

idfiyjo8

idfiyjo81#

AFAIK RowMapper是一个函数接口,所以这是可行的。lambda表达式不能声明已检查的异常,所以您需要 Package ...

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

这些评论非常中肯:因为函数接口已经声明抛出异常,所以不需要捕获它。

2ekbmq32

2ekbmq322#

试试这个

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

相关问题