📜  Spring – RowMapper 和 ResultSetExtractor 的区别(1)

📅  最后修改于: 2023-12-03 15:20:13.616000             🧑  作者: Mango

Spring – RowMapper 和 ResultSetExtractor 的区别

在Spring JDBC中,有两个接口 RowMapper 和 ResultSetExtractor 分别用于将查询结果映射到Java对象和将查询结果提取为某种数据类型。虽然它们的工作有些相似,但两者之间确有不同之处。

RowMapper

RowMapper 是一个接口,它定义了一个方法 mapRow,用于将ResultSet中的单一行映射到Java对象。它可以用于将查询结果集映射到单个Java对象或Java集合中的多个对象。

public interface RowMapper<T> {
    T mapRow(ResultSet rs, int rowNum) throws SQLException;
}

该方法的第一个参数是ResultSet,它表示查询结果。第二个参数是一个整数,表示当前行号。该方法返回一个T类型的对象,其中T是要映射的Java对象类型。

ResultSetExtractor

ResultSetExtractor 是一个接口,它定义了一个方法 extractData,用于将整个ResultSet映射到某个数据类型。它可以用于将查询结果集映射到任意数据类型,如List、Set或Map。

public interface ResultSetExtractor<T> {
    T extractData(ResultSet rs) throws SQLException, DataAccessException;
}

该方法的参数是ResultSet,表示查询结果。该方法返回一个T类型的对象,其中T是要生成的数据类型。

区别

可以看到,RowMapper和ResultSetExtractor之间的主要区别在于返回值。RowMapper返回单个对象或集合中的多个对象,而ResultSetExtractor返回提取的数据类型。

在实际使用中,RowMapper通常用于将查询结果映射为单个Java对象或Java集合,而ResultSetExtractor通常用于将查询结果映射为非标准Java类型(例如自定义对象)。

另一个区别是,RowMapper的结果类型可以是任何类型,而ResultSetExtractor的结果类型限制了一定的灵活性。

总之,RowMapper和ResultSetExtractor之间的选择取决于实现的要求和查询结果的处理方式。