JdbcTemplate中的BeanPropertyRowMapper和ColumnMapRowMapper有什么区别?

BeanPropertyRowMapper和ColumnMapRowMapper是JdbcTemplate中两个常用的RowMapper实现,主要区别如下:

BeanPropertyRowMapper:

  • 将ResultSet的每行记录映射到一个JavaBean类。
  • 依赖JavaBean命名规范,即列名和Bean属性名相同。
  • 简单易用,但是对列名和属性名比较敏感。

ColumnMapRowMapper:

  • 将ResultSet的每行记录映射到一个Map。
  • 键是列名,值是列值。
  • 对列名不敏感,但是返回Map可能不方便后续处理。

代码示例:

BeanPropertyRowMapper:

String sql = "SELECT * FROM user";
List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
  • 假设User类有id和name属性,对应表的列
  • 无需指定映射关系,直接传入User.class
  • 返回List,包含全部User对象

ColumnMapRowMapper:

List<Map<String, Object>> users = jdbcTemplate.query(sql, new ColumnMapRowMapper()); 
  • 返回List>
  • 每个Map表示一条记录,键是列名,值为列值

所以,主要区别在于:
BeanPropertyRowMapper:映射到JavaBean,依赖命名规范,简单易用。
ColumnMapRowMapper:映射到Map,对列名不敏感,但是返回Map使用不太方便。

根据查询结果的使用场景,选择不同的RowMapper实现。如果后续直接使用JavaBean,BeanPropertyRowMapper简单高效。如果进行自定义处理,ColumnMapRowMapper更加灵活。