很遗憾,我认为目前不支持此功能。
查看spring-data-relational库,Insert语句接受一个值列表,但是每个值对应一列,没办法添加不同的行。
如果您深入了解这个库,InsertBuilder 接口声明的方法如下:
/**
* Add one or more {@link Expression values} to the {@code VALUES} list. Calling this method multiple times will add
* a {@link Expression values} multiple times.
*
* @param values the values.
* @return {@code this} builder.
* @see Column
*/
@Override
InsertValuesWithBuild values(Expression... values);
实现将这些值存储到表达式列表中(DefaultInsertBuilder 类):
/**
* Default {@link InsertBuilder} implementation.
*
* @author Mark Paluch
* @since 1.1
*/
class DefaultInsertBuilder
implements InsertBuilder, InsertBuilder.InsertIntoColumnsAndValuesWithBuild, InsertBuilder.InsertValuesWithBuild {
private @Nullable Table into;
private List<Column> columns = new ArrayList<>();
private List<Expression> values = new ArrayList<>();
[...]
然后,渲染器类(将语句转换为 SQL 字符串)将这些值添加到 VALUES(...) 中,每个值用逗号分隔(InsertStatementVisitor 类):
if (segment instanceof Insert) {
builder.append("INSERT");
builder.append(" INTO ").append(into);
if (columns.length() != 0) {
builder.append(" (").append(columns).append(")");
}
builder.append(" VALUES (").append(values).append(")");
return Delegation.leave();
}
在ValuesVisitor 类中填写此处的值:
if (first) {
first = false;
} else {
builder.append(", ");
}
builder.append(this.current.getRenderedPart());
所以 spring-data-relational 的代码表明,现在不可能有像 VALUES(...),(...) 这样的 SQL。