使用Java 8 Lambda表达式替换Spring JdbcTemplate中的RowMapper匿名类
用Java 8 Lambda替换JdbcTemplate的匿名RowMapper
嘿,这事儿超简单!因为RowMapper是个函数式接口(只有一个抽象方法mapRow),刚好适配Java 8的Lambda表达式语法,直接替换就能让代码清爽不少。
改造后的完整代码
List<PersonDTO> personList = jdbcTemplate.query(query, (rs, rowNumber) -> { PersonDTO personDTO = new PersonDTO(); personDTO.setPerId(rs.getString("COL_ONE")); personDTO.setIdTypeCd(rs.getString("COL_TWO")); return personDTO; });
关键说明
- 直接省略了匿名类的
new RowMapper<PersonDTO>() { @Override public PersonDTO mapRow(...) }冗余部分,用(rs, rowNumber)对应原方法的两个参数——编译器能自动推断参数类型,所以不用手动写ResultSet rs, int rowNumber - 大括号里的逻辑和原来匿名类的
mapRow方法体完全一致,不需要做任何修改 - 如果你的业务逻辑足够简单(比如一行就能完成对象构建与返回),还可以进一步简化成单行Lambda(去掉大括号和
return),不过这里多行写法的可读性更强,更推荐保留
改造后代码既简洁又完全保留原有功能,完美适配Java 8及以上版本的编码风格。
内容的提问来源于stack exchange,提问作者Sumit Ghosh
相关产品推荐
相关产品推荐

