是否可以将动态参数传递给@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”)完美运行。
答案 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注入!