JdbcTemplate提供了多种方式进行查询操作,主要有:
- queryForMap():查询一行并返回Map。
String sql = "SELECT * FROM user WHERE id = ?";
Map<String, Object> user = jdbcTemplate.queryForMap(sql, 1);
- queryForList():查询多行并返回List。
String sql = "SELECT * FROM user";
List<Map<String, Object>> users = jdbcTemplate.queryForList(sql);
- query():查询并自定义返回结果类型,通过RowMapper接口转换。
String sql = "SELECT * FROM user WHERE age > ?";
List<User> users = jdbcTemplate.query(sql, new Object[] {20},
(rs, rowNum) -> {
return new User(rs.getString("name"), rs.getInt("age"));
}
);
- queryForObject():查询单行单列并返回对象,适用于聚合函数等。
String sql = "SELECT COUNT(1) FROM user";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
- queryWithRowCallback():通过调用RowCallbackHandler处理每行查询结果。
String sql = "SELECT * FROM user";
jdbcTemplate.query(sql, new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
User user = new User(rs.getString("name"), rs.getInt("age"));
// ...
}
});
所以,JdbcTemplate通过以上5种主要方式,可以灵活进行查询操作并自定义返回结果,基本涵盖了各种需求。其中query()
和queryForList()
等方式支持的参数绑定,可以有效防止SQL注入。
相比直接使用JDBC,JdbcTemplate简化了查询操作的代码量,并自动处理资源管理等底层细节,这也是它易于使用的主要原因。