Anorm - 通用插入
Anorm - generic insert
有没有办法像使用常规 ORM 一样使用 Anorm?我想要一个只插入提供的元素的方法。
def insert[T](element: T)(implicit connection: Connection) = {
element.insert(connection)
}
我自己肯定能实现,但感觉我在重新实现一个ORM...旧的异常版本有这个Magic[T]但我现在看不到
documentation 明确指出 Anorm 不是 ORM(而且永远不会是)。
作为 indicated,要插入或更新 T
值,必须提供 ToStatement
类型类的实例。
一些 macros are provided 自动实现这样的实例。
import anorm.{ Macro, SQL, ToParameterList }
import anorm.NamedParameter
case class Bar(v: Int)
val bar1 = Bar(1)
// Convert all supported properties as parameters
val toParams1: ToParameterList[Bar] = Macro.toParameters[Bar]
val params1: List[NamedParameter] = toParams1(bar1)
// --> List(NamedParameter(v,ParameterValue(1)))
val names1: List[String] = params1.map(_.name)
// --> List(v)
val placeholders = names1.map { n => s"{$n}" } mkString ", "
// --> "{v}"
val generatedStmt = s"""INSERT INTO bar(${names1 mkString ", "}) VALUES ($placeholders)"""
val generatedSql1 = SQL(generatedStmt).on(params1: _*)
有没有办法像使用常规 ORM 一样使用 Anorm?我想要一个只插入提供的元素的方法。
def insert[T](element: T)(implicit connection: Connection) = {
element.insert(connection)
}
我自己肯定能实现,但感觉我在重新实现一个ORM...旧的异常版本有这个Magic[T]但我现在看不到
documentation 明确指出 Anorm 不是 ORM(而且永远不会是)。
作为 indicated,要插入或更新 T
值,必须提供 ToStatement
类型类的实例。
一些 macros are provided 自动实现这样的实例。
import anorm.{ Macro, SQL, ToParameterList }
import anorm.NamedParameter
case class Bar(v: Int)
val bar1 = Bar(1)
// Convert all supported properties as parameters
val toParams1: ToParameterList[Bar] = Macro.toParameters[Bar]
val params1: List[NamedParameter] = toParams1(bar1)
// --> List(NamedParameter(v,ParameterValue(1)))
val names1: List[String] = params1.map(_.name)
// --> List(v)
val placeholders = names1.map { n => s"{$n}" } mkString ", "
// --> "{v}"
val generatedStmt = s"""INSERT INTO bar(${names1 mkString ", "}) VALUES ($placeholders)"""
val generatedSql1 = SQL(generatedStmt).on(params1: _*)