跳到主要内容

结果接收

Redis 命令返回结果集后,可以使用 dbVisitor 的三个结果处理接口。不同 API 的接入情况如下。

API 支持

API 入口RowMapperRowCallbackHandlerResultSetExtractor
编程式 API支持支持支持
Mapper API(方法注解)支持支持支持
构造器 API不支持不支持不支持
Mapper 文件支持支持支持

构造器 API 不会将查询条件转换为 Redis 命令,因此不能从该入口发起查询。这不是三个结果处理接口的限制;改用原生命令即可处理结果。

编程式 API

例如,ZRANGE scores 0 -1 WITHSCORES 返回 ELEMENTSCORE 两列。

// RowMapper:每行转换为一个字符串。
List<String> members = jdbcTemplate.queryForList(
"ZRANGE ? 0 -1 WITHSCORES", new Object[] { "scores" },
(rs, rowNum) -> rs.getString("ELEMENT"));
// RowCallbackHandler:逐行处理,不收集返回列表。
jdbcTemplate.query("ZRANGE ? 0 -1 WITHSCORES", new Object[] { "scores" },
(rs, rowNum) -> System.out.println(rs.getString("ELEMENT")));

// ResultSetExtractor:将整个结果集整理为成员与分数的映射。
Map<String, Double> scores = jdbcTemplate.query(
"ZRANGE ? 0 -1 WITHSCORES", new Object[] { "scores" }, rs -> {
Map<String, Double> result = new LinkedHashMap<>();
while (rs.next()) {
result.put(rs.getString("ELEMENT"), rs.getDouble("SCORE"));
}
return result;
});

各命令的列名见命令与结果集

Mapper API 与 Mapper 文件

方法注解使用 @QueryresultRowMapperresultRowCallbackresultSetExtractor 属性指定处理器类;Mapper 文件的 <select> 使用同名属性。

<select id="members"
resultRowMapper="net.hasor.dbvisitor.jdbc.mapper.ColumnMapRowMapper">
ZRANGE #{key} 0 -1 WITHSCORES
</select>

方法注解与 Mapper 文件中都填写 Redis 原生命令,不需要转换成 SQL。处理器配置及实现方式见结果接收