Rowmapper最好?

时间:2014-02-25 10:16:41

标签: java spring-jdbc

我使用了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;
    }
}

2 个答案:

答案 0 :(得分:1)

RowMapperResultSetExtractor之间的关键区别是你的问题似乎忽略了:

  • RowMapper每行生成一个对象;
  • ResultSetExtractor每整个ResultSet生成一个对象。

因此假设一个结果行代表一个用户,ResultSetExtractor的返回类型不能为User

通常情况下,如果它可以支持您的用例,请更喜欢RowMapper。如果您的最终结果是User个对象的列表,则无需手动对ResultSet进行迭代,添加到您必须创建的列表,这是您需要的做ResultSetExtractor

答案 1 :(得分:1)

根据你的情况RowMapper是一个更好的解决方案,考虑到有更多的解决方案,如对象关系映射(ORM),JDO等。但是在给出的两个选择中,RowMapper将提取数据在每行的基础上,到单个结果对象,所以减少了所需输出的迭代头痛

<强>结果集

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

ResultSet对象维护一个指向其当前数据行的光标。最初,光标位于第一行之前。下一个方法将游标移动到下一行,因为当ResultSet对象中没有更多行时它返回false,它可以在while循环中用于迭代结果集。

<强>的RowMapper

JdbcTemplate用于基于每行映射ResultSet的行的接口。此接口的实现执行将每行映射到结果对象的实际工作,但不需要担心异常处理。 SQLExceptions将被调用JdbcTemplate捕获并处理。

Ref Link 1

Ref Link 2