Spring 的 JdbcTemplate 为我们操作数据库提供非常大的便利,不需要显式的管理资源和处理异常。在我们进入到了 Java 8 后,JdbcTemplate 方法中的回调函数可以用 Lambda 表达式进行简化,而本文要说的正是这种 Lambda 简化容易给我们带来的一个 Bug, 这是我在一个实际项目中写的单元测试发现的。
下面就是我们的一个样板代码,在我们的 UserRespository
中有一个方法 findAll() 用于获得所有用户:
1 2 3 4 5 6 7 8 9 |
public List<User> findAll() { List<User> users = new ArrayList<>(); jdbcTemplate.query("select id, name from user", rs -> { while (rs.next()) { users.add(new User(rs.getInt("id"), rs.getString("name"))); } }); return users; } |