JOOQ 解析 orderBy 和 orderDirection 以与 dslcontext 一起使用
Posted
技术标签:
【中文标题】JOOQ 解析 orderBy 和 orderDirection 以与 dslcontext 一起使用【英文标题】:JOOQ parsing orderBy and orderDirection to use with dslcontext 【发布时间】:2019-01-14 14:38:28 【问题描述】:我正在从我的控制器获取 orderBy 和 orderDirection,并希望对其进行解析并将其与我使用 DSLContext 进行查询的存储库一起使用。
这是我的方法:
public List<Map<String, Object>> read(@NonNull final String schema,
@NonNull final String tableName,
@NonNull final List<String> columnNames,
@NonNull final String queryConditions,
@NonNull final String orderBy,
@NonNull final String orderDirection)
final Table table = table(getTableWithSchema(schema, tableName));
final List<Condition> conditions = conditionMapper.mapToConditions(queryConditions);
final List<Field<?>> fields = fieldsMapper.mapToFields(columnNames);
final SortField sortField = ???
return crudRepository.read(table, fields, conditions, sortField);
后来我的crud将其称为:
public List<Map<String, Object>> read(@NonNull final Table<?> table,
@NonNull final Collection<Field<?>> fields,
@NonNull final Collection<Condition> conditions,
@NonNull final SortField<?> sortField)
return dslContext
.select(fields)
.from(table)
.where(conditions)
.orderBy(sortField)
.fetchMaps();
我将如何创建该 sortField(只有一个)以便将其传递给 dslContext?
【问题讨论】:
只是为了确定,因为您正在使用String
类型(并且因为我很偏执):您的控制器不会将用户输入传递给您的read()
方法,对吗?跨度>
不,它是一个仅供管理员使用的内部工具 - 它由另一个验证参数等的 API 使用
正如我所说,我很偏执。如果 String
值来自您的逻辑之外(通过 API、UI 无关紧要),那么您在这里暴露了 SQL 注入漏洞。我强烈建议您自己清理您的输入,而不是依赖“另一个 API”。
【参考方案1】:
我自己找到的 - JOOQ 初学者在这里,所以也许它会帮助别人。
SortField<?> sortField = DSL.field(orderBy).sort(SortOrder.valueOf(orderDirection));
【讨论】:
以上是关于JOOQ 解析 orderBy 和 orderDirection 以与 dslcontext 一起使用的主要内容,如果未能解决你的问题,请参考以下文章