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

标签 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 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/

相关文章:

javascript - 尝试将 React/Ajax 调用与 Spring MVC 和 Thymeleaf 结合使用

java - 在 Spring/Hibernate 中正确使用缓存

algorithm - 从给定的列表或 map 中找到转换器的最佳路径

java - 这是如何工作的 - Java 8Optional.of 和Optional.ofNullable

spring - Spring Dispatcher Servlet 和 Web 部署描述符有什么区别?

java - 在 Web 应用程序中隐藏非常敏感的凭据的正确方法

java - 在 return 语句中找不到适合 ArrayList<String> .toArray(String[]::new) 的方法

java - 从 spring boot simpleJDBCcall 调用 PL SQL 过程时出错

java - JdbcTemplate 选择更新

java - Spring JDBC - 批量删除和插入