val emps: Seq[Emp] = ...
val column = Emp.column
val (placeholders, batchParams) = createBatchParams {
emps.map { emp =>
Seq(
column.id -> emp.id,
column.name -> emp.name
)
}
}
DB localTx { implicit session =>
withSQL {
insert.into(Emp).namedValues(placeholders: _*)
}.batch(batchParams: _*).apply()
}
// もっと適切な名前があれば
def createBatchParams(parameters: Seq[Seq[(SQLSyntax, ParameterBinder)]]):
(Seq[(SQLSyntax, ParameterBinder)], Seq[Seq[ParameterBinder]]) = {
def addPlaceholders(columns: Seq[SQLSyntax]): Seq[(SQLSyntax, ParameterBinder)] = {
columns.zip(List.fill(columns.size)(SQLSyntaxParameterBinder(sqls.?)))
}
parameters.foldLeft((Vector.empty[(SQLSyntax, ParameterBinder)], Vector.empty[Seq[ParameterBinder]])) {
case ((Vector(), paramsSeq), entry) =>
val (columns, params) = entry.unzip
val placeholders = addPlaceholders(columns)
(placeholders, paramsSeq :+ params)
case ((placeholders, paramsSeq), entry) =>
val (_, params) = entry.unzip
(placeholders, paramsSeq :+ params)
}
}
名前を強制したいので以下みたいな方がいいかな。