如何使用带有where子句的ScalikeJDBC返回()

时间:2018-03-02 12:41:12

标签: scala scalikejdbc

我正在尝试使用Postgres'使用ScalikeJDBC RETURNING(请参阅https://github.com/scalikejdbc/scalikejdbc/issues/559

这假设如何使用where子句。 returning(...)UpdateSQLBuilder的成员,而where则返回ConditionSQLBuilder

update(Post)
   .set(sqls"${p.views}=${p.views}+${newViews}")
   .where.eq(p.id,id)
   .returning(p.id,p.lastUpdated, p.views) // does not work as it is not a member of ConditionSQLBuilder

1 个答案:

答案 0 :(得分:5)

如您所说,returning不是ConditionSQLBuilder的成员。但是,您可以在append子句后使用where方法,因为它是在ConditionSQLBuilder上定义的:

update(Post)
   .set(sqls"${p.views} = ${p.views} + ${newViews}")
   .where.eq(p.id, id)
   .append(sqls"returning ${p.id}, ${p.lastUpdated}, ${p.views}"

而且,如果您使用这样的构建器将返回的列映射到对象中:

val postOpt = withSQL(builder).map(Post(p)).single().apply()

然后,您必须在${p.result.columnName}中使用${p.columnName}而不是SQLSyntax,并将其作为参数传递给append方法。要映射所有列,只需使用${p.result.*}