将动态参数传递给@MapKey(“ $ {dynamicParam}”)(My-Batis)

时间:2019-05-22 05:21:06

标签: java mybatis

是否可以将动态参数传递给@MapKey注释?我必须动态选择表的键,以便在Map中构造表结果。

我尝试像使用$ {}语法对任何SQL查询一样传递动态参数。

不起作用

@MapKey("${tablePk}")
 @Select("${sql}")
 Map doGenericOperation(@Param("sql") String sql, @Param("tablePk") String tablePk);

作品

@MapKey("id")
 @Select("${sql}")
 Map doGenericOperation(@Param("sql") String sql, @Param("tablePk") String tablePk);

在这种情况下,地图键不适用。但是,如果我通过它,如果喜欢 @Map(“ id”)完美运行。

1 个答案:

答案 0 :(得分:0)

不,这不可能。

当您将整个sql作为字符串传递时,应该可以预先为主键分配固定别名。

此外,无需使用@MapKey即可轻松实现所需的目标。

@Select("${sql}")
List<Map<String, ?>> doGenericOperation_Internal(@Param("sql") String sql);

default Map<?, Map<String, ?>> doGenericOperation(String sql, String tablePk) {
  return doGenericOperation_Internal(sql).stream()
    .collect(Collectors.toMap(e -> e.get(tablePk), e -> e));
}

请确保不要将任何用户提供的字符串作为sql的一部分传递,以避免SQL注入!