spring的jdbc支持中,2.0中RowMapperResultSetExtractor 替换1.0中 RowMapperResultReader 但是用法基本一样,以下是个例子: dbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // reusable object RowMapper rowMapper = new UserRowMapper(); // reusable object
List allUsers = (List) jdbcTemplate.query("select * from user",new RowMapperResultSetExtractor(rowMapper, 10));
User user = (User) jdbcTemplate.queryForObject("select * from user where id=?", new Object[] {id}, new RowMapperResultSetExtractor(rowMapper, 1)); //其中UserRowMapper可以这么实现: public class UserRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int index) throws SQLException {
// TODO Auto-generated method stub
User user=new User();
user.setId(rs.getString("001"));
user.setPassword(rs.getString("xxx"));
return user;
}
} 本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 点击链接欢迎加入感兴趣的技术领域群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Spring JDBC中,RowMapperResultSetExtractor
和RowMapperResultReader
都是用于处理查询结果集并将其映射为Java对象的工具。如您所述,在Spring 2.0之后,推荐使用RowMapperResultSetExtractor
来替代已废弃的RowMapperResultReader
。
从您的示例代码来看,您已经正确展示了如何使用RowMapperResultSetExtractor
与JdbcTemplate
进行数据库操作。这里简要解释一下各个部分的作用:
创建JdbcTemplate
实例:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
这里通过数据源(dataSource
)初始化了JdbcTemplate
,它是Spring JDBC的核心类,用于简化SQL操作。
定义RowMapper
实现:
RowMapper rowMapper = new UserRowMapper();
RowMapper
是一个接口,你需要提供一个实现来告诉Spring如何将ResultSet
中的每一行数据转换成一个Java对象。在这个例子中,UserRowMapper
实现了这个接口,并负责创建User
对象。
使用RowMapperResultSetExtractor
执行查询:
List allUsers = (List) jdbcTemplate.query(
"select * from user",
new RowMapperResultSetExtractor(rowMapper, 10)
);
和
User user = (User) jdbcTemplate.queryForObject(
"select * from user where id=?",
new Object[] {id},
new RowMapperResultSetExtractor(rowMapper, 1)
);
这两段代码分别展示了如何获取所有用户和根据ID获取单个用户。RowMapperResultSetExtractor
不仅负责将结果集转换为对象列表,还可以限制提取的结果数量(第二个参数),这在处理大量数据时非常有用,可以避免一次性加载过多数据到内存中。
UserRowMapper
的实现: 您的UserRowMapper
实现正确地从ResultSet
中读取列值并填充到User
对象中。但请注意,当从ResultSet
中获取列值时,建议使用列名而不是硬编码的字符串(例如"001"和"xxx"),以提高代码的可读性和维护性:
user.setId(rs.getString("id"));
user.setPassword(rs.getString("password"));
总结来说,您已经很好地展示了如何在Spring 2.0及以后版本中使用RowMapperResultSetExtractor
进行数据库查询和结果映射。确保遵循最佳实践,比如使用列名而非索引,并考虑利用Spring框架提供的其他便利功能,如异常处理和事务管理,以进一步增强应用的健壮性和易用性。