是否可以将动态参数传递给@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 键在这种情况下不适用。但是如果我通过的话 @Map("id") 工作完美。
最佳答案
不,这是不可能的。
当您将整个 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 注入(inject)!
关于java - 将动态参数传递给 @MapKey ("${dynamicParam}") (My-Batis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249768/