Spring RowMapper接口如何工作?

Spring RowMapper接口如何工作?,第1张

Spring RowMapper接口如何工作?

queryForObject
方法如下所示:

public <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException {    List<T> results = query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper, 1));    return DataAccessUtils.requiredSingleResult(results);}

所述

queryForObject
-method内部调用该方法
query
的上
JdbcTemplate
对象。所述
query
-method定义为:

public <T> T query(        PreparedStatementCreator psc, final PreparedStatementSetter pss, final ResultSetExtractor<T> rse)        throws DataAccessException;

如您所见,a

ResultSetExtractor<T>
传递给
query
-method,Spring方便地将您转换
RowMapper<T>
为type对象
newRowMapperResultSetExtractor<T>(rowMapper,1)
。该
RowMapperResultSetExtractor
是保存的关键法宝的对象。调用对象时,它将按照以下代码片段迭代所有行:

public List<T> extractData(ResultSet rs) throws SQLException {    List<T> results = (this.rowsExpected > 0 ? new ArrayList<T>(this.rowsExpected) : new ArrayList<T>());    int rowNum = 0;    while (rs.next()) {        results.add(this.rowMapper.mapRow(rs, rowNum++));    }    return results;}

因此,您的原始内容

RowMapper
是为每一行调用的回调。此外,如您在此处看到的,
RowMapper
将为所有匹配的结果调用,并将
Restaurant
您创建的-
object添加到结果列表中。但是,由于仅查询 一个 对象,因此以下语句最终用于返回单个
Restaurant
对象。

        return DataAccessUtils.requiredSingleResult(results);

因此,总结一下:

JdbcTempalte
实现了Strategy
Pattern(类似于Template方法模式)。并且通过提供一个
Strategy接口
RowMapper
),您可以
JdbcTemplate
为您完成繁重的工作(处理异常,连接等)。该
RowMapper
地图将每个
Restaurant
匹配项都映射为POJO
,所有匹配项都被收集到中
List
queryForObject
然后,该方法从中获取第一行,
List
并将其返回给调用方。返回值基于的通用类型
RowMapper
,在您的情况下为
Restaurant



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5587190.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-15
下一篇2022-12-15

发表评论

登录后才能评论

评论列表(0条)

    保存