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更加灵活。