我使用了resultset类从jsp中的mysql获取数据库信息。现在我在使用Spring MVC。那么我会用什么? Resultset或Rowmapper?
的RowMapper
public class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet resultSet, int line) throws SQLException {
UserExtractor userExtractor = new UserExtractor();
return userExtractor.extractData(resultSet);
}
}
public class UserExtractor implements ResultSetExtractor<User> {
public User extractData(ResultSet resultSet) throws SQLException, DataAccessException {
User user = new User();
user.setUserId(resultSet.getInt(1));
user.setFirstName(resultSet.getString(2));
user.setLastName(resultSet.getString(3));
user.setGender(resultSet.getString(4));
user.setCity(resultSet.getString(5));
return user;
}
}
答案 0 :(得分:1)
RowMapper
和ResultSetExtractor
之间的关键区别是你的问题似乎忽略了:
RowMapper
每行生成一个对象; ResultSetExtractor
每整个ResultSet
生成一个对象。因此假设一个结果行代表一个用户,ResultSetExtractor
的返回类型不能为User
。
通常情况下,如果它可以支持您的用例,请更喜欢RowMapper
。如果您的最终结果是User
个对象的列表,则无需手动对ResultSet
进行迭代,添加到您必须创建的列表,这是您需要的做ResultSetExtractor
。
答案 1 :(得分:1)
根据你的情况RowMapper
是一个更好的解决方案,考虑到有更多的解决方案,如对象关系映射(ORM),JDO等。但是在给出的两个选择中,RowMapper将提取数据在每行的基础上,到单个结果对象,所以减少了所需输出的迭代头痛
<强>结果集强>
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet
对象维护一个指向其当前数据行的光标。最初,光标位于第一行之前。下一个方法将游标移动到下一行,因为当ResultSet对象中没有更多行时它返回false,它可以在while循环中用于迭代结果集。
<强>的RowMapper 强>
JdbcTemplate用于基于每行映射ResultSet的行的接口。此接口的实现执行将每行映射到结果对象的实际工作,但不需要担心异常处理。 SQLExceptions将被调用JdbcTemplate捕获并处理。