JdbcTemplate中的QueryForObject和QueryForList有什么区别?

JdbcTemplate提供了queryForObject()和queryForList()两种方法执行查询,主要区别如下:

queryForObject():

  • 执行查询语句,返回单行单列结果。
  • 典型的场景是执行聚合函数查询,如count()等。
  • 返回Object,需要传入对应的RowMapper实现或ResultSetExtractor。

queryForList():

  • 执行查询语句,返回多行结果。
  • 返回List,T是RowMapper映射的类型,通常为Entity。
  • 适用于比较普通的多行记录查询。

代码示例:

queryForObject():

String sql = "SELECT count(*) FROM user"; 
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
  • 执行单行单列count(*)查询
  • 返回Integer
  • 传入ResultSetExtractor或RowMapper
String sql = "SELECT name FROM user WHERE id = ?";
String name = jdbcTemplate.queryForObject(sql, String.class, 1); 
  • 执行单行单列name查询
  • 返回String
  • 传入对应的参数值

queryForList():

String sql = "SELECT * FROM user";  
List<User> users = jdbcTemplate.queryForList(sql, User.class);
  • 执行普通多行查询
  • 返回List,User是实体类
  • 无需指定RowMapper,使用BeanPropertyRowMapper映射User

所以,主要区别在于:
queryForObject():返回单个值,用于聚合函数或单行单列查询。
queryForList():返回List,用于普通的多行记录查询。