栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring RowMapper接口如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596000.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号